我使用的是SQL Server 2005。我有一个带有文本列的表,在表中有许多行,其中该列的值不是空的,但它是空的。试着对比”会得到这样的回答:
数据类型text和varchar在不等于操作符中是不兼容的。
是否有一个特殊的函数来确定文本列的值是否为空而不是空?
我使用的是SQL Server 2005。我有一个带有文本列的表,在表中有许多行,其中该列的值不是空的,但它是空的。试着对比”会得到这样的回答:
数据类型text和varchar在不等于操作符中是不兼容的。
是否有一个特殊的函数来确定文本列的值是否为空而不是空?
当前回答
用一个case代替isnull,因为它的性能更好。
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
其他回答
我知道这个帖子很古老,但是我发现它很有用。
它没有解决我的问题,返回记录与非空文本字段,所以我认为我将添加我的解决方案。
这就是where从句对我有用。
WHERE xyz LIKE CAST('% %' as text)
我知道这个问题有很多替代答案,但我只是想把我发现的最佳解决方案放在一起,由@Eric Z Beard和@Tim Cooper和@Enrique Garcia和@Uli Köhler。
如果需要处理在用例场景中space-only可能与空相同的事实,因为下面的查询将返回1,而不是0。
SELECT datalength(' ')
因此,我会选择这样的东西:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
你必须做到这两点:
从文本为空或类似文本的表中选择*
它会做两件事: 空检查和字符串空检查 将空值替换为默认值,例如NA。
SELECT coalesce(NULLIF(column_name,''),'NA') as 'desired_name') from table;
DECLARE @temp as nvarchar(20)
SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'
SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)