如何检查SQL Server文本列是否为空?


183

我正在使用SQL Server2005。我有一个带有文本列的表,并且该表中有很多行,其中该列的值不为null,但为空。尝试与“”进行比较,将产生以下响应:

数据类型text和varchar在不等于运算符中不兼容。

是否有一个特殊功能来确定文本列的值是否不是null而是空的?


1
我会尽可能将数据类型转换为varchar(max),不建议使用文本-如果您触摸表格,最好立即开始进行更改。当然,请与您的dba核对一下。但是,在必须转换之前,可以转换的东西越多,我的想法就越好。这将取决于您使用多少代码,例如包含和编写文本,现在是否执行此操作将被破坏,但是我提出来了,因此您知道最终需要进行更改。
HLGEM 2010年

Answers:


304
where datalength(mytextfield)=0

2
这不是实际的问题,只是对只阅读标题的人的一句话,别忘了添加OR mytextfield IS NULL您的专栏文章的时间NULL
Daan

2
mytextfield IS NULL *OR*:-)
ban-geoengineering

3
@ ban-geoengineering SQL Server T-SQL不支持短路评估技术,因此此处的顺序不会影响结果。
康拉德

47
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

上面的查询实际上将处理文本列的空性和空性,并相应地根据条件分配值。支持答案,因为这是我一直在寻找的。谢谢
user_v

28

实际上,您只需要使用LIKE运算符即可。

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1我比其他答案更喜欢此答案,因为它不依赖于调用SQL函数(如DataLength(),IsNull()或Cast())的额外开销。也许生成的查询计划是相同的(我没有检查);我仍然觉得这是一个更简洁的方法。
MikeTeeVee

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短语,因为与其他类型的搜索相比,它们会降低性能。


不是myColumn IS NOT NULL AND my column = '';
bcsb1001 2014年

2

使用IS NULL运算符:

Select * from tb_Employee where ename is null

1
atoumey在问题中指出“此列的值不为null,但为空”,因此ISNULL()无效:)
GazB 2013年


1

我知道这篇文章很古老,但是我发现它很有用。

它没有解决我的返回带有非空文本字段的记录的问题,所以我想我应该添加解决方案。

这是对我有用的where子句。

WHERE xyz LIKE CAST('% %' as text)



0

null和空字符串等效吗?如果是的话,我会在我的应用程序中包含逻辑(如果应用程序是“开箱即用”的话,可能会包含一个触发器?)来强制该字段为null或”,而不是其他字段。如果使用'',则也可以将列设置为NOT NULL。只是数据清洁的事情。


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

哇,子查询。一点也不贵。
杰伊·克罗汉

0

您必须同时执行以下两项操作:

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


0

我知道有很多替代方法可以解决此问题,但是我只想将@Eric Z Beard和@Tim Cooper与@Enrique Garcia和@UliKöhler找到的最佳解决方案放在一起。

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

SELECT datalength(' ')

因此,我会选择类似的东西:

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


0

最好不要isnull使用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

您首先检查是否为null,然后使用len函数...希望对您有所帮助
Enrique Garcia,

如果该列不为NULL并且为空,没有文本怎么办?
穆罕默德·伊德雷斯(Muhammad Idrees)

0
DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.