151

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

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

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

+1

Я бы преобразовать станд данных e, если возможно, varchar (max), текст устарел - лучше всего начать внесение изменений, если вы касаетесь таблицы. Конечно, с вашим дба. Но чем больше вещей можно преобразовать, прежде чем они должны быть преобразованы, тем лучше будет моя мысль. Это будет зависеть от того, сколько кода у вас есть, например, содержит и записывает текст, который будет нарушен в отношении того, делать ли это сейчас, но я его раскрываю, поэтому вы знаете, что в конечном итоге это необходимо будет изменить. – HLGEM 2010-06-23 18:35:08

+0

Я никогда не видел так много неправильных ответов после того, как был дан правильный ответ и обозначен как правильный ответ! – 2013-02-06 19:35:32

ответ

241
where datalength(mytextfield)=0 
+10

http://msdn.microsoft.com/en-us/library/ms173486.aspx – 2010-09-29 18:50:57

+0

Это был не вопрос, а просто замечание для людей, которые только читают заголовок, не забудьте добавить `OR mytextfield IS NULL`, когда ваша колонка может быть «NULL» – Daan 2015-08-27 09:50:28

+0

`mytextfield IS NULL * OR *` :-) – 2016-11-20 20:24:32

21

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

SELECT * FROM mytable WHERE mytextfield LIKE '' 
+3

Кажется, что не работает в SQL Server 2008 – escist 2012-06-26 11:31:36

0

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

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

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

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 
2

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

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

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

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

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

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

2

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

SELECT * FROM TABLE WHERE FIELDNAME='' 
1

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

Select * from tb_Employee where ename is null 
0
SELECT * FROM TABLE 
WHERE ISNULL(LTRIM(RTRIM(FIELD)),''='' 
6

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

SELECT * FROM myTable WHERE myColumn = '' 

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

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

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

SELECT * FROM myTable WHERE myColumn IS NULL 

Для получения значений, отличных от нуля и пустых:

SELECT * FROM myTable WHERE myColumn <> '' 


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

0

Я знаю, что есть много ответов с альтернативами этой проблемы, но я просто хотел бы, чтобы собрать то, что я нашел, как лучшее решение по @Eric Z Beard & @ Тим Купер с @Enrique Гарсиа & @Uli Кёлер.

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

SELECT datalength(' ') 

Поэтому, я бы пойти на что-то вроде:

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