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

时间:2008-08-28 21:09:00

标签: sql-server sql-server-2005 sqldatatypes notnull emptydatatext

我正在使用SQL Server 2005.我有一个带有文本列的表,我在表中有很多行,此列的值不为null,但它是空的。试图与''进行比较产生这种反应:

  

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

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

17 个答案:

答案 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)

<块引用>

它会做两件事:

  1. 空检查和字符串空检查
  2. 将空值替换为默认值,例如 NA。
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。只是数据清洁的事情。