2008-08-28 31 views
151

J'utilise SQL Server 2005. J'ai une table avec une colonne de texte et j'ai beaucoup de lignes dans la table où la valeur de cette colonne n'est pas nulle, mais elle est vide. Essayer de comparer par rapport à '' donne cette réponse:Comment vérifier si une colonne de texte SQL Server est vide?

Les types de données text et varchar sont incompatibles dans l'opérateur différent de l'opérateur.

Y a-t-il une fonction spéciale permettant de déterminer si la valeur d'une colonne de texte n'est pas nulle mais vide?

+1

je serais convertir le typ de données e si possible à varchar (max), le texte a été déprécié - mieux vaut commencer à faire les changements maintenant si vous touchez la table. Vérifiez avec votre dba bien sûr. Mais plus les choses peuvent être converties avant d'être converties, meilleure est ma pensée. Cela dépendra de la quantité de code que vous utiliserez, comme le contenu et l'écriture du texte, qui sera cassé pour ce qui est de le faire maintenant, mais je le soulève, donc vous êtes conscient que cela devra éventuellement être changé. – HLGEM

+0

Je n'ai jamais vu autant de réponses incorrectes après qu'une bonne réponse ait été donnée et marquée comme bonne réponse! –

Répondre

241
where datalength(mytextfield)=0 
+10

http://msdn.microsoft.com/en-us/library/ms173486.aspx –

+0

Ce n'était pas la vraie question, mais juste une remarque pour les gens qui ne lisent que le titre, n'oubliez pas d'ajouter 'OU mytextfield IS NULL' quand votre colonne peut être 'NULL' – Daan

+0

' mytextfield EST NULL * OU * ':-) –

21

En fait, il vous suffit d'utiliser l'opérateur LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE '' 
+3

Ne semble pas fonctionner dans SQL Server 2008 – escist

+0

@escist vous avez raison. – Dane

+0

Génial! Simple le meilleur! –

0

Est-ce que null et une chaîne vide équivalent? Si c'est le cas, j'inclurais la logique dans mon application (ou peut-être un déclencheur si l'application est "prête à l'emploi"?) Pour forcer le champ à être nul ou "", mais pas l'autre. Si vous avez utilisé '', vous pouvez également définir la colonne sur NOT NULL. Juste une chose de propreté des données.

43
ISNULL(
case textcolum1 
    WHEN '' THEN NULL 
    ELSE textcolum1 
END 
,textcolum2) textcolum1 
+0

La requête ci-dessus traitera en réalité la nature de nullité et de vide d'une colonne de texte et affectera donc une valeur en fonction de la condition. Upvote pour la réponse puisque c'est ce que je cherchais. Merci –

0

Je voulais avoir un texte prédéfini (« No Labs disponible ») à afficher si la valeur est nulle ou vide et mon ami m'a aidé à ceci:

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0) 
          THEN cast((S.UnitsOrdered) as varchar(50)) 
        ELSE 'No Labs Available' 
        END 
2

Je sais ce poste est ancien mais, je l'ai trouvé utile.

Je n'ai pas résolu mon problème de renvoi de l'enregistrement avec un champ de texte non vide, donc j'ai pensé ajouter ma solution.

C'est la clause where qui a fonctionné pour moi.

WHERE xyz LIKE CAST('% %' as text) 
0

Vous devez faire les deux:

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''

2

Vous pouvez faire comme

SELECT * FROM TABLE WHERE FIELDNAME='' 
+4

Vous n'avez même pas lu toute la question. Comme déjà dit dans un commentaire sur la réponse maintenant supprimée, la comparaison avec '' donne l'erreur qui apparaît dans la question initiale. –

1

utiliser l'opérateur NULL:

Select * from tb_Employee where ename is null 
+0

atoumey déclare dans la question que "la valeur de cette colonne n'est pas nulle, mais elle est vide" donc ISNULL() ne fonctionnerait pas :) – GazB

0
SELECT * FROM TABLE 
WHERE ISNULL(LTRIM(RTRIM(FIELD)),''='' 
6

Pour obtenir uniquement des valeurs vides (et les valeurs non nulles):

SELECT * FROM myTable WHERE myColumn = '' 

Pour obtenir les valeurs nulles et vides:

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = '' 

Pour obtenir uniquement les valeurs nulles:

SELECT * FROM myTable WHERE myColumn IS NULL 

Pour obtenir des valeurs autres que null et vides:

SELECT * FROM myTable WHERE myColumn <> '' 


Et rappelez-vous d'utiliser des expressions LIKE uniquement lorsque cela est nécessaire, car elles vont dégrader les performances par rapport à d'autres types de recherches.

+0

Ne voulez-vous pas dire que myColumn n'est pas NULL ET ma colonne = ''; '? – bcsb1001

+0

Merci, clarifié. – Nima

0

Je sais qu'il ya des réponses alternatives avec abondance à ce problème, mais je voudrais juste mettre en place ce que je trouve que la meilleure solution par @Eric Z Barbe & Cooper avec @Enrique @ Tim Garcia & @Uli Köhler.

Si nécessaire pour faire face au fait que l'espace ne pouvait être le même que vide dans votre scénario cas d'utilisation, parce que la requête ci-dessous retournera 1, non 0.

SELECT datalength(' ') 

Par conséquent, je aller pour quelque chose comme:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], '')))) 
0

Utilisez la méthode DATALENGTH, par exemple:

SELECT length = DATALENGTH(myField) 
FROM myTABLE