Как проверить, является ли текстовый столбец SQL Server пустым? - PullRequest
167 голосов
/ 29 августа 2008

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

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

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

Ответы [ 14 ]

270 голосов
/ 29 августа 2008
where datalength(mytextfield)=0
45 голосов
/ 23 июня 2010
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1
23 голосов
/ 29 августа 2008

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

SELECT * FROM mytable WHERE mytextfield LIKE ''
5 голосов
/ 23 августа 2014

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

SELECT * FROM myTable WHERE myColumn = ''

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

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

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

SELECT * FROM myTable WHERE myColumn IS NULL

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

SELECT * FROM myTable WHERE myColumn <> ''


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

1 голос
/ 27 августа 2015

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

SELECT length = DATALENGTH(myField)
FROM myTABLE
1 голос
/ 13 июня 2012

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

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

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

WHERE xyz LIKE CAST('% %' as text)
0 голосов
/ 10 октября 2018

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

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

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

0 голосов
/ 07 августа 2015

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

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

SELECT datalength(' ')

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

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
0 голосов
/ 10 февраля 2014
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
0 голосов
/ 04 июня 2013

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

Select * from tb_Employee where ename is null
...