Функция TSQL LEN возвращает 1 при вычислении целого числа нулевой длины - PullRequest
1 голос
/ 17 октября 2011

Я использую SQL Server 2008.

Я обнаружил, что функция LEN не возвращает ноль, когда она вычисляет целое число, когда целое число не имеет значения - она ​​возвращает 1.

Например:

declare @int1 int
set @int1 = ''
select LEN(@int1)

1 возвращается вместо нуля! Но целое число имеет нулевую длину!

Почему это? Это ошибка?

Ответы [ 3 ]

6 голосов
/ 17 октября 2011

INT не имеет длины. Это то, что вы на самом деле делаете ...

  • Создать переменную INT
  • Создать строку нулевой длины ''
  • CAST эту строку в INT 0
  • Назначить результат переменной
  • CAST значение переменной в STRING '0'
  • Расчет длины этой строки

Результатом является то, что ваша функция LEN не вызывается на '', а вызывается в действительности на '0', который имеет длину 1.

2 голосов
/ 17 октября 2011

Вы должны присвоить NULL целым числам, чтобы они означали «у меня нет значения»

как то так:

declare @int1 int 
set @int1 = null
select @int1 
union
select LEN(isnull(cast(@int1 as varchar),''))

возвращает

NULL
0
1 голос
/ 17 октября 2011

int1 будет инициализировано как '0', поэтому оно возвращает правильный результат:

declare @int1 int set @int1 = '' 
select @int1
select LEN(@int1)

Возвращает:

0

1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...