Почему SQL Server 2005 случайно сокращает пробелы? - PullRequest
1 голос
/ 05 января 2009

Следующий 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.

Кто-нибудь знает, что здесь происходит?

Обновление : Похоже, это связано с параметром базы данных ANSI_PADDING, описанным Microsoft в этой статье базы знаний .

1 Ответ

5 голосов
/ 05 января 2009

Согласно документации:

Возвращает количество символов указанного строкового выражения, исключая конечные пробелы.

Существует похожая функция с именем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...