Как проверить, пуст ли текстовый столбец SQL Server?
Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом, и у меня много строк в таблице, где значение этого столбца не равно null, но оно пусто. Попытка сравнить с '' дает этот ответ:
Текст типов данных и varchar несовместимы в не равном оператору.
Есть ли специальная функция, чтобы определить, не является ли значение текстового столбца нулевым, но пустым?
ISNULL(
case textcolum1
WHEN '' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
На самом деле вам просто нужно использовать оператор LIKE.
SELECT * FROM mytable WHERE mytextfield LIKE ''
Чтобы получить только пустые значения (а не нулевые значения):
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-фразы только тогда, когда это необходимо, потому что они ухудшат производительность по сравнению с другими типами поиска.
Я знаю, что этот пост древний, но я нашел его полезным.
Он не разрешил мою проблему возврата записи с непустым текстовым полем, поэтому я решил добавить свое решение.
Это предложение where, которое сработало для меня.
WHERE xyz LIKE CAST('% %' as text)
Используйте DATALENGTH, например:
SELECT length = DATALENGTH(myField)
FROM myTABLE
Нуль и пустая строка эквивалентны? Если они есть, я бы включил логику в свое приложение (или, может быть, триггер, если приложение "вне коробки"?), Чтобы заставить поле быть либо нулевым, либо "", но не другим. Если вы пошли с '', то вы также можете установить столбец NOT 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.
Если необходимо, чтобы иметь дело с тем, что пространство-только может быть таким же пустым в вашем сценарии использования, потому что запрос ниже возвращает 1, а не 0.
SELECT datalength(' ')
Поэтому я бы пошел на что-то вроде:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
попробуй это:
select * from mytable where convert(varchar, mycolumn) = ''
я надеюсь помочь тебе!
Вместо использования 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
DECLARE @temp as nvarchar(20)
SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'
SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
Посмотрите другие вопросы по меткам sql-server sql-server-2005 notnull sqldatatypes или Задайте вопрос