193 votes

Comment vérifier si une colonne de texte SQL Server est vide ?

J'utilise SQL Server 2005. J'ai une table avec une colonne de texte et j'ai de nombreuses lignes dans la table où la valeur de cette colonne n'est pas nulle, mais elle est vide. En essayant de comparer avec '', on obtient cette réponse :

Les types de données text et varchar sont incompatibles dans l'opérateur not equal to.

Existe-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 votes

Je convertirais le type de données si possible en varchar (max), le texte a été déprécié - le mieux est de commencer à faire les changements maintenant si vous touchez la table. Vérifiez avec votre dba bien sûr. Mais je pense que plus vous pouvez convertir de choses avant qu'elles ne doivent être converties, mieux c'est. Cela dépendra de la quantité de code que vous avez en utilisant des choses comme contains et write text qui sera cassé pour savoir s'il faut faire cela maintenant, mais je l'évoque pour que vous soyez conscient que cela devra être changé un jour.

321voto

Eric Z Beard Points 18473
where datalength(mytextfield)=0

3 votes

Ce n'était pas la question réelle, mais juste une remarque pour les personnes qui n'ont lu que le titre, n'oubliez pas de rajouter OR mytextfield IS NULL quand votre colonne peut être NULL

3 votes

mytextfield IS NULL *OR* :-)

4 votes

@ban-geoengineering SQL Server T-SQL n'honore pas les techniques d'évaluation des courts-circuits, donc l'ordre ici n'affecte pas le résultat.

49voto

Eric Points 271
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

0 votes

La requête ci-dessus traitera en fait la nature nulle et vide d'une colonne de texte et assignera en conséquence une valeur basée sur la condition. Upvote pour la réponse puisque c'est ce que je cherchais. Merci

30voto

Dane Points 3595

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

SELECT * FROM mytable WHERE mytextfield LIKE ''

0 votes

+1 Je préfère cette réponse aux autres parce qu'elle ne s'appuie pas sur les frais supplémentaires liés à l'appel de fonctions SQL comme DataLength(), IsNull() ou Cast(). Il est possible que le plan de requête généré soit le même (je n'ai pas vérifié) ; néanmoins, je trouve que c'est une loin une approche plus propre.

1voto

Mike Roberts Points 11

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

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

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

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

0voto

bdukes Points 54833

Je testerais contre SUBSTRING (textColumn, 0, 1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X