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

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

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

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

Ответ 1

where datalength(mytextfield)=0

Ответ 2

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

Ответ 3

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

SELECT * FROM mytable WHERE mytextfield LIKE ''

Ответ 4

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

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-фразы только тогда, когда это необходимо, потому что они ухудшат производительность по сравнению с другими типами поиска.

Ответ 5

Вы можете сделать

SELECT * FROM TABLE WHERE FIELDNAME=''

Ответ 6

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

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

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

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

Ответ 7

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

Select * from tb_Employee where ename is null

Ответ 8

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

Ответ 9

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

SELECT length = DATALENGTH(myField)
FROM myTABLE

Ответ 10

Я бы опробовал SUBSTRING (textColumn, 0, 1)

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

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

Ответ 14

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

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

SELECT datalength(' ')

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

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

Ответ 15

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

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

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

Ответ 16

Вместо использования isnull используйте case, из-за производительности это лучше кейс.

case when campo is null then '' else campo end

В вашем выпуске вам нужно сделать это:

case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

Код как это:

create table #tabla(
id int,
campo varchar(10)
)

insert into #tabla
values(1,null)

insert into #tabla
values(2,'')

insert into #tabla
values(3,null)

insert into #tabla
values(4,'dato4')

insert into #tabla
values(5,'dato5')

select id, case when campo is null then 'DATA NULL' else
  case when len(campo) = 0 then 'DATA EMPTY' else campo end
end
from #tabla

drop table #tabla

Ответ 17

DECLARE @temp as nvarchar(20)

SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)