我正在使用SQL Server 2005.我有一个带有文本列的表,我在表中有很多行,此列的值不为null,但它是空的。试图与''进行比较产生这种反应:
数据类型text和varchar在不等于运算符时不兼容。
是否有一个特殊函数来确定文本列的值是否为空但是空?
答案 0 :(得分:270)
where datalength(mytextfield)=0
答案 1 :(得分:45)
ISNULL(
case textcolum1
WHEN '' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
答案 2 :(得分:23)
实际上,您只需使用LIKE运算符。
SELECT * FROM mytable WHERE mytextfield LIKE ''
答案 3 :(得分: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短语,因为与其他类型的搜索相比,它们会降低性能。
答案 4 :(得分:1)
我知道这篇文章很古老,但我发现它很有用。
它没有解决我使用非空文本字段返回记录的问题,所以我想我会添加我的解决方案。
这是适用于我的where子句。
WHERE xyz LIKE CAST('% %' as text)
答案 5 :(得分:1)
使用DATALENGTH方法,例如:
SELECT length = DATALENGTH(myField)
FROM myTABLE
答案 6 :(得分:0)
它会做两件事:
SELECT coalesce(NULLIF(column_name,''),'NA') as 'desired_name') from table;
答案 7 :(得分:0)
我会针对SUBSTRING(textColumn,0,1)
进行测试答案 8 :(得分:0)
transaction.atomic()
答案 9 :(得分:0)
出于性能考虑,最好不要使用isnull
,而是使用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
答案 10 :(得分:0)
尝试一下:
select * from mytable where convert(varchar, mycolumn) = ''
希望对您有帮助!
答案 11 :(得分:0)
我知道有很多答案可以替代这个问题,但我只是想把我发现的最好的解决方案放在@Eric Z Beard&amp; @Tim Cooper与@Enrique Garcia&amp; @UliKöhler。
如果需要处理在用例场景中仅空格可能与空相同的事实,因为下面的查询将返回1,而不是0。
SELECT datalength(' ')
因此,我会选择以下内容:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
答案 12 :(得分:0)
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
答案 13 :(得分:0)
使用IS NULL运算符:
Select * from tb_Employee where ename is null
答案 14 :(得分:0)
你必须同时做到这两点:
SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''
答案 15 :(得分:0)
如果值为null或为空,我希望显示预定义文本(“No Labs Available”),我的朋友帮助了我:
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
答案 16 :(得分:0)
null和空字符串是否等效?如果它们是,我会在我的应用程序中包含逻辑(或者如果应用程序是“开箱即用”的话可能是触发器?)来强制该字段为null或'',而不是另一个。如果你使用'',那么你也可以将列设置为NOT NULL。只是数据清洁的事情。