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

Sql server 如何检查SQL Server文本列是否为空?,sql-server,sql-server-2005,sqldatatypes,notnull,emptydatatext,Sql Server,Sql Server 2005,Sqldatatypes,Notnull,Emptydatatext,我正在使用SQLServer2005。我有一个带有文本列的表,表中有许多行,其中该列的值不为null,但为空。尝试与“”进行比较会产生以下响应: “不等于”运算符中的数据类型text和varchar不兼容 SELECT * FROM mytable WHERE mytextfield LIKE '' 是否有一个特殊的函数来确定文本列的值是否不是null而是空的?我将测试(textColumn,0,1)实际上,您只需要使用LIKE操作符 SELECT * FROM mytable WHERE m

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

“不等于”运算符中的数据类型text和varchar不兼容

SELECT * FROM mytable WHERE mytextfield LIKE ''

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

我将测试(textColumn,0,1)

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

SELECT * FROM mytable WHERE mytextfield LIKE ''

null和空字符串是否等效?如果是,我会在我的应用程序中包含逻辑(如果应用程序是“开箱即用”的话,可能会包含一个触发器),以强制字段为null或“”,而不是另一个。如果使用“”,则还可以将该列设置为NOTNULL。只是数据清洁问题。

我想在值为null或空时显示一个预定义的文本(“没有可用的实验室”),我的朋友帮了我:

ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1
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

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

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

这就是对我有效的where条款

WHERE xyz LIKE CAST('% %' as text)
你必须同时做这两件事:


从文本为NULL或类似“”的文本的表中选择*

使用IS NULL运算符:

Select * from tb_Employee where ename is null
要仅获取空值(而不是空值),请执行以下操作:

要同时获取null值和空值,请执行以下操作:

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''
要仅获取空值,请执行以下操作:

SELECT * FROM myTable WHERE myColumn = ''
SELECT * FROM myTable WHERE myColumn IS NULL
要获取null和empty以外的值,请执行以下操作:

SELECT * FROM myTable WHERE myColumn <> ''
从myColumn“”所在的myTable中选择*


请记住,只有在必要时才使用类似的短语,因为与其他类型的搜索相比,它们会降低性能。

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

如果需要处理这样一个事实,即在您的用例场景中,空间只能是空的,因为下面的查询将返回1,而不是0

SELECT datalength(' ')
因此,我会选择这样的方式:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
使用方法,例如:

SELECT length = DATALENGTH(myField)
FROM myTABLE
试试这个:

select * from mytable where convert(varchar, mycolumn) = ''

我希望能帮助你

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

如果可能的话,我会将数据类型转换为varchar(max),text已被弃用-如果您正在触摸表,最好现在就开始进行更改。当然,请咨询您的dba。但我的想法是,在必须转换之前,可以转换的东西越多越好。这将取决于您有多少代码使用包含和写入文本之类的内容,现在是否执行此操作将被破坏,但我提出了这个问题,因此您知道最终需要更改。上面的查询将实际处理文本列的空性和空性,并根据条件相应地赋值。投票支持这个答案,因为这是我一直在寻找的。Thanksatoumey在问题中指出“此列的值不是null,但它是空的”,因此ISNULL()不起作用:)你的意思是
myColumn不是null,my column=''
?这不是实际的问题,只是对那些只阅读标题的人说的一句话,不要忘记添加
或mytextfield为NULL
,当你的列可以为
NULL
时,
:-)@ban geoengineering SQL Server t-SQL不支持短路评估技术,所以这里的顺序不会影响结果。哇,一个子查询。这一点也不贵,但。。。其中ISNULL(修剪(字段),“”)=“”更好;-),如果您觉得“”是空字符串,即使MySQL中有空格,正确的语法是:
SQL SELECT*FROM TABLE WHERE IFNULL(字段“”)=''
首先检查是否为空,然后使用len函数。。。我希望它能帮助我们,如果列不是NULL和空的,没有文本?空格?或者你是什么意思?+1我更喜欢这个答案,因为它不依赖于调用DataLength()、IsNull()或Cast()等SQL函数所增加的开销。可能生成的查询计划是相同的(我没有检查);不过,我发现这是一种更干净的方法。
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)