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

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

How do I check if a SQL Server text column is empty?

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

The data types text and varchar are incompatible in the not equal to operator.

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


1
where datalength(mytextfield)=0

1
2
3
4
5
6
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END
,textcolum2) textcolum1


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

1
SELECT * FROM mytable WHERE mytextfield LIKE ''

要仅获取空值(而非空值):

1
SELECT * FROM myTable WHERE myColumn = ''

要同时获取空值和空值:

1
SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''

要仅获取空值:

1
SELECT * FROM myTable WHERE myColumn IS NULL

要获取null和empty以外的值:

1
SELECT * FROM myTable WHERE myColumn <> ''

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


使用IS NULL运算符:

1
Select * from tb_Employee where ename is null

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

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

这是对我有用的where子句。

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


1
2
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

使用DATALENGTH方法,例如:

1
2
SELECT length = DATALENGTH(myField)
FROM myTABLE

1
2
3
4
5
6
7
DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)

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

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

1
SELECT datalength(' ')

因此,我会选择:

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

我将针对SUBSTRING(textColumn,0,1)进行测试


我想显示一个预定义的文本("没有可用的实验室"),如果该值为空或空,并且我的朋友帮了我这个忙:

1
2
3
4
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

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


尝试这个:

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

希望对你有帮助!


出于性能考虑,最好不要使用case,而是使用case

1
case when campo is null then '' else campo end

在您的问题中,您需要执行以下操作:

1
2
3
case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

像这样的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

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

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


推荐阅读