Как проверить, пуст ли текстовый столбец SQL Server?
Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом и у меня есть много строк в таблице, где значение этого столбца не равен null, но это пустое. Попытка сравнить с " дает такой ответ:
типы данных text и varchar несовместимы в операторе not equal to.
есть ли специальная функция для определения того, является ли значение текстового столбца не нулевым, а пустым?
15 ответов
на самом деле, вам просто нужно использовать оператор 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)
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
Я знаю, что есть много ответов с альтернативами этой проблеме, но я просто хотел бы собрать то, что я нашел как лучшее решение @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