我使用的是SQL Server 2005。我有一个带有文本列的表,在表中有许多行,其中该列的值不是空的,但它是空的。试着对比”会得到这样的回答:

数据类型text和varchar在不等于操作符中是不兼容的。

是否有一个特殊的函数来确定文本列的值是否为空而不是空?


当前回答

实际上,你只需要使用LIKE操作符。

SELECT * FROM mytable WHERE mytextfield LIKE ''

其他回答

我想有一个预定义的文本(“无实验室可用”)显示,如果值为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

我将测试SUBSTRING(textColumn, 0,1)

用一个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

我知道这个问题有很多替代答案,但我只是想把我发现的最佳解决方案放在一起,由@Eric Z Beard和@Tim Cooper和@Enrique Garcia和@Uli Köhler。

如果需要处理在用例场景中space-only可能与空相同的事实,因为下面的查询将返回1,而不是0。

SELECT datalength(' ')

因此,我会选择这样的东西:

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

使用IS NULL操作符:

Select * from tb_Employee where ename is null