196

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

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

是否有特殊功能可以判断文本列的值是否不为空而是为空?

4

17 回答 17

327
where datalength(mytextfield)=0
于 2008-08-28T21:14:17.417 回答
51
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1
于 2010-06-23T18:29:42.083 回答
32

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

SELECT * FROM mytable WHERE mytextfield LIKE ''
于 2008-08-29T06:06:25.033 回答
10

要仅获取空值(而不是空值):

SELECT * FROM myTable WHERE myColumn = ''

要同时获取 null 值和空值:

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

仅获取空值:

SELECT * FROM myTable WHERE myColumn IS NULL

要获取 null 和空以外的值:

SELECT * FROM myTable WHERE myColumn <> ''


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

于 2014-08-22T20:00:34.410 回答
3
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
于 2014-02-10T19:21:43.770 回答
2

使用 IS NULL 运算符:

Select * from tb_Employee where ename is null
于 2013-06-04T10:49:48.383 回答
1

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

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

这是对我有用的 where 子句。

WHERE xyz LIKE CAST('% %' as text)
于 2012-06-13T15:05:47.797 回答
1

使用DATALENGTH方法,例如:

SELECT length = DATALENGTH(myField)
FROM myTABLE
于 2015-08-27T20:15:21.317 回答
1

而不是使用isnulluse a 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
于 2019-06-14T13:28:39.003 回答
0

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

于 2008-08-28T21:11:00.483 回答
0

null 和空字符串是否等效?如果是,我会在我的应用程序中包含逻辑(或者如果应用程序是“开箱即用”的,则可能是触发器?)以强制该字段为 null 或 '',而不是另一个。如果您使用 '',那么您也可以将该列设置为 NOT NULL。只是一个数据清洁的事情。

于 2008-08-29T20:03:04.603 回答
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
于 2012-03-07T19:50:03.903 回答
0

你必须同时做:

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

于 2012-09-07T23:11:46.983 回答
0

我知道这个问题有很多替代方案,但我只想将@Eric Z Beard 和@Tim Cooper 与@Enrique Garcia 和@Uli Köhler 发现的最佳解决方案放在一起。

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

SELECT datalength(' ')

因此,我会选择类似的东西:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
于 2015-08-07T10:09:12.430 回答
0

试试这个:

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

我希望能帮助你!

于 2018-10-10T12:47:16.017 回答
0
DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
于 2019-08-23T14:15:14.287 回答
0

它会做两件事:

  1. 空值检查和字符串空值检查
  2. 将空值替换为默认值,例如 NA。
SELECT coalesce(NULLIF(column_name,''),'NA') as 'desired_name') from table;
于 2021-07-29T09:26:59.037 回答