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

sql-server sql-server-2005 sqldatatypes notnull emptydatatext

358524 просмотра

16 ответа

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

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

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

Автор: atoumey Источник Размещён: 23.08.2019 05:18

Ответы (16)


278 плюса

Решение
where datalength(mytextfield)=0
Автор: Eric Z Beard Размещён: 28.08.2008 09:14

47 плюса

ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1
Автор: Eric Размещён: 23.06.2010 06:29

23 плюса

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

SELECT * FROM mytable WHERE mytextfield LIKE ''
Автор: Dane Размещён: 29.08.2008 06:06

5 плюса

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

SELECT * FROM myTable WHERE myColumn = ''

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

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

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

SELECT * FROM myTable WHERE myColumn IS NULL

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

SELECT * FROM myTable WHERE myColumn <> ''


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

Автор: Nima Размещён: 22.08.2014 08:00

1 плюс

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

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

Это пункт, который работал для меня.

WHERE xyz LIKE CAST('% %' as text)
Автор: Mike Roberts Размещён: 13.06.2012 03:05

1 плюс

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

SELECT length = DATALENGTH(myField)
FROM myTABLE
Автор: Jorgesys Размещён: 27.08.2015 08:15

1 плюс

SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
Автор: Enrique Garcia Размещён: 10.02.2014 07:21

0 плюса

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

Автор: bdukes Размещён: 28.08.2008 09:11

0 плюса

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

Автор: Tyler Gooch Размещён: 29.08.2008 08:03

0 плюса

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

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
Автор: Yoosaf Abdulla Размещён: 07.03.2012 07:50

0 плюса

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

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

Автор: marklark Размещён: 07.09.2012 11:11

0 плюса

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

Select * from tb_Employee where ename is null
Автор: Pearl Размещён: 04.06.2013 10:49

0 плюса

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

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

SELECT datalength(' ')

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

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
Автор: Leo Размещён: 07.08.2015 10:09

0 плюса

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

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

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

Автор: Luiz Fernando Corrêa Leite Размещён: 10.10.2018 12:47

0 плюса

Вместо использования isnulluse a 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
Автор: Enrique Garcia Размещён: 14.06.2019 01:28

0 плюса

DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
Автор: user11968038 Размещён: 23.08.2019 02:15
Вопросы из категории :
32x32