Sql server 如何检查SQL Server文本列是否为空?
我正在使用SQLServer2005。我有一个带有文本列的表,表中有许多行,其中该列的值不为null,但为空。尝试与“”进行比较会产生以下响应: “不等于”运算符中的数据类型text和varchar不兼容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
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)