Ответ 1
where datalength(mytextfield)=0
Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом, и у меня много строк в таблице, где значение этого столбца не равно null, но оно пусто. Попытка сравнить с '' дает этот ответ:
Текст типов данных и varchar несовместимы в не равном оператору.
Есть ли специальная функция, чтобы определить, не является ли значение текстового столбца нулевым, но пустым?
where datalength(mytextfield)=0
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-фразы только тогда, когда это необходимо, потому что они ухудшат производительность по сравнению с другими типами поиска.
Вы можете сделать
SELECT * FROM TABLE WHERE FIELDNAME=''
Я знаю, что этот пост древний, но я нашел его полезным.
Он не разрешил мою проблему возврата записи с непустым текстовым полем, поэтому я решил добавить свое решение.
Это предложение where, которое сработало для меня.
WHERE xyz LIKE CAST('% %' as text)
Используйте оператор IS NULL:
Select * from tb_Employee where ename is null
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
Используйте DATALENGTH, например:
SELECT length = DATALENGTH(myField)
FROM myTABLE
Я бы опробовал SUBSTRING (textColumn, 0, 1)
Нуль и пустая строка эквивалентны? Если они есть, я бы включил логику в свое приложение (или, может быть, триггер, если приложение "вне коробки"?), Чтобы заставить поле быть либо нулевым, либо "", но не другим. Если вы пошли с '', то вы также можете установить столбец 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
Вы должны сделать оба:
SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''
Я знаю, что есть много ответов с альтернативами этой проблеме, но я просто хотел бы собрать то, что я нашел как лучшее решение от @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)