Как проверить, пуст ли текстовый столбец SQL Server?

Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом и у меня есть много строк в таблице, где значение этого столбца не равен null, но это пустое. Попытка сравнить с " дает такой ответ:

типы данных text и varchar несовместимы в операторе not equal to.

есть ли специальная функция для определения того, является ли значение текстового столбца не нулевым, а пустым?

15 ответов


where datalength(mytextfield)=0

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

на самом деле, вам просто нужно использовать оператор LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE ''

чтобы получить только пустые значения (а не нулевые значения):

SELECT * FROM myTable WHERE myColumn = ''

чтобы получить как нулевые, так и пустые значения:

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

чтобы получить только значения null:

SELECT * FROM myTable WHERE myColumn IS NULL

чтобы получить значения, отличные от null и empty:

SELECT * FROM myTable WHERE myColumn <> ''


И помните, что используйте подобные фразы только при необходимости, потому что они снизят производительность по сравнению с другими типами поиска.


Я знаю, что этот пост древний, но я нашел его полезным.

Это не решило мою проблему возврата записи с непустым текстовым полем, поэтому я подумал, что добавлю свое решение.

это предложение where, которое работало для меня.

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

вы могли бы сделать, как

SELECT * FROM TABLE WHERE FIELDNAME=''

Я бы проверил против подстрока(textColumn, 0, 1)


Используйте оператор IS NULL:

Select * from tb_Employee where ename is null

SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

null и пустая строка эквивалентна? Если это так, я бы включил логику в свое приложение (или, может быть, триггер, если приложение "из коробки"?) чтобы заставить поле быть либо нулевым, либо", но не другим. Если вы пошли с ", то вы также можете установить столбец не NULL. Просто чистота данных.


Я хотел иметь предопределенный текст ("нет доступных лабораторий") для отображения, если значение равно null или пусто, и мой друг помог мне в этом:

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

нужно сделать так:

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


Я знаю, что есть много ответов с альтернативами этой проблеме, но я просто хотел бы собрать то, что я нашел как лучшее решение @Eric Z Beard & @Tim Cooper с @Enrique Garcia & @Uli Köhler.

Если необходимо, чтобы иметь дело с тем, что space-only может быть таким же, как пустой в вашем сценарии использования, потому что запрос ниже вернет 1, а не 0.

SELECT datalength(' ')

поэтому я бы пошел на что-то вроде:

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

использовать DATALENGTH способ, например:

SELECT length = DATALENGTH(myField)
FROM myTABLE

попробуйте это:

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

Я надеюсь помочь u!