Question

J'utilise SQL Server 2005.J'ai un tableau avec une colonne de texte et j'ai de nombreuses lignes dans le tableau où la valeur de cette colonne n'est pas nulle, mais elle est vide.Essayer de comparer avec '' donne cette réponse :

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

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

Était-ce utile?

La solution

where datalength(mytextfield)=0

Autres conseils

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

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

SELECT * FROM mytable WHERE mytextfield LIKE ''

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

SELECT * FROM myTable WHERE myColumn = ''

Pour obtenir à la fois des valeurs nulles et vides :

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

Pour obtenir uniquement des valeurs nulles :

SELECT * FROM myTable WHERE myColumn IS NULL

Pour obtenir des valeurs autres que null et vides :

SELECT * FROM myTable WHERE myColumn <> ''


Et n'oubliez pas d'utiliser les expressions LIKE uniquement lorsque cela est nécessaire, car elles dégraderont les performances par rapport à d'autres types de recherches.

Je sais que ce message 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, j'ai donc pensé ajouter ma solution.

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

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

Utiliser LONGUEUR DES DONNÉES méthode, par exemple :

SELECT length = DATALENGTH(myField)
FROM myTABLE

je testerais contre SOUS-CHAÎNE(textColonne, 0, 1)

Est-ce que null et une chaîne vide sont équivalents ?Si tel est le cas, j'inclurais une 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 optez pour '', vous pouvez également définir la colonne sur NOT NULL.Juste une question de propreté des données.

Je voulais qu'un texte prédéfini ("Aucun laboratoire disponible") soit affiché si la valeur était nulle ou vide et mon ami m'a aidé avec 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

Il faut faire les deux :

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

Utilisez l'opérateur IS NULL :

Select * from tb_Employee where ename is null

Je sais qu'il existe de nombreuses réponses avec des alternatives à ce problème, mais je voudrais simplement rassembler ce que j'ai trouvé comme la meilleure solution par @Eric Z Beard & @Tim Cooper avec @Enrique Garcia & @Uli Köhler.

Si nécessaire, pour tenir compte du fait que l'espace uniquement pourrait être identique à vide dans votre scénario de cas d'utilisation, car la requête ci-dessous renverra 1, et non 0.

SELECT datalength(' ')

J'opterais donc pour quelque chose comme :

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

essaye ça:

select * from mytable where convert(varchar, mycolumn) = ''

j'espère t'aider !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top