如何检查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 ''


推荐阅读

    linux命令中有问号?

    linux命令中有问号?,不了,系统,数字,权限,问号,文件,中文,乱码,字形,字母,lin

    检查路由命令linux?

    检查路由命令linux?,网络,地址,系统,信息,工具,电脑,时间,通信,服务,命令,lin

    linux编辑文本命令行?

    linux编辑文本命令行?,工作,系统,信息,状态,地址,命令,管理,标准,目录,文件,L

    linux查看文本的命令?

    linux查看文本的命令?,系统,工作,标准,信息,命令,管理,数据,文件,目录,时间,L

    linux文本中插入命令?

    linux文本中插入命令?,工作,地址,系统,命令,信息,第一,工具,地方,密码,情况,L

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux分区检查命令是?

    linux分区检查命令是?,系统,设备,工具,管理,情况,信息,检测,分区,密码,单位,

    linux文本撤销命令?

    linux文本撤销命令?,系统,命令,信息,环境,状态,进程,程序,终端,快捷键,用户,

    linux命令中创建文本?

    linux命令中创建文本?,系统,时间,文件,终端,名字,名称,发行,命令,文件夹,文

    linux文本编辑命令?

    linux文本编辑命令?,工作,系统,地址,信息,环境,基础,命令,入口,网站,技术,lin

    linux检查流量的命令?

    linux检查流量的命令?,工具,系统,实时,状态,网络,信息,数据,密码,地址,流量,l

    查找文本的linux命令?

    查找文本的linux命令?,工具,命令,信息,系统,标准,文件,终端,情况,内容,字符

    linux检查更新命令是?

    linux检查更新命令是?,工作,软件,地址,系统,信息,管理,命令,目录,最新,标准,l

    linux文本下的命令?

    linux文本下的命令?,地址,工作,系统,标准,信息,命令,数据,目录,文件,控制台,L

    命令检查linux版本?

    命令检查linux版本?,系统,地址,信息,发行,名称,电脑,版本,连续,工具,周期,在L

    linux命令行文本比较?

    linux命令行文本比较?,时间,系统,标准,状态,代码,设备,工具,软件,文件,命令,l

    linux内存检查命令?

    linux内存检查命令?,情况,系统,信息,工具,实时,分析,状态,内存,命令,总量,查

    linux命令行文本移动?

    linux命令行文本移动?,系统,工作,地址,信息,命令,目录,文件,时间,管理,标准,l

    linux下节点检查命令?

    linux下节点检查命令?,系统,信息,工作,名称,命令,地址,情况,文件,服务,第一,l

    编辑文本的linux命令?

    编辑文本的linux命令?,工作,系统,信息,命令,标准,数据,资料,目录,文件,操作,L