以下T / SQL: -
create table #temp(foo varchar(10))
insert into #temp select ''
insert into #temp select 'abc'
insert into #temp select ' '
select len(foo) from #temp where foo = ' '
drop table #temp
返回两个0,尽管标准意味着它不会返回任何内容。此外,它返回两个空白行的长度,其中一个确实长度为0,但也是一个长度为1的行,报告长度为0。
有人知道这里发生了什么吗?!
更新:看来这与Microsoft在this KB article中涵盖的ANSI_PADDING数据库选项有关。
答案 0 :(得分:5)
根据文件:
返回指定字符串表达式的字符数,不包括尾随空格。
你应该熟悉一个名为DataLength的类似函数。
create table #temp(foo varchar(10))
insert into #temp select ''
insert into #temp select 'abc'
insert into #temp select ' '
select len(foo), DataLength(foo) from #temp where foo = ' '
drop table #temp
删除尾随空格也是为了进行比较。您可以通过将数据转换为varbinary并以此方式进行比较来实现此目的。如果你这样做,我会单独留下原始比较(出于可怜的原因)。
create table #temp(foo varchar(10))
insert into #temp select ''
insert into #temp select 'abc'
insert into #temp select ' '
select len(foo), DataLength(foo)
from #temp
where foo = ' '
and Convert(varbinary(8), foo) = Convert(VarBinary(8), ' ')
drop table #temp