我正在使用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(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 ''