лен варбарина - PullRequest
       1

лен варбарина

7 голосов
/ 07 сентября 2010

Может кто-нибудь объяснить, почему select len ​​(0x0a000b) возвращает 3? len считает байты? а почему select left (0x0a000b, 1) ничего не возвращает? я ожидал 0x0a (если len считает байты) ...

я использую mssql 2005

спасибо константин

Ответы [ 3 ]

5 голосов
/ 07 сентября 2010

select len(0x0a000b) возвращает длину строки, представленной тремя байтами 0x0a, 0x00 и 0x0b.

select left(0x0a000b, 1) возвращает крайний левый символ строки, который является символом новой строки.

Обратите внимание, что select case when left(0x0a000b, 1) = 0x0a then 1 else 0 end возвращает 1, что означает, что вы действительно получаете символ новой строки.

Редактировать: Дополнительные сведения см. В комментариях ниже.

3 голосов
/ 07 сентября 2010

left - строковый оператор, поэтому он не работает с двоичными данными так, как вы ожидаете; вместо этого используйте подстроку (@v, 1, 1)

len , с другой стороны, возвращает длину двоичных данных (кроме других типов данных);хотя есть очень интересное исключение для строк, когда мы измеряем длину строки с помощью этой команды, она сначала выполняет для нее rtrim;поэтому len ('a') вернет 1

1 голос
/ 07 сентября 2010

Может кто-нибудь объяснить, почему select len ​​(0x0a000b) возвращает 3

это 3 символа
0x означает, что это двоичный файл

0a символ 1
00 символов 2
0b символов 3

у вас есть непечатаемый символ, я считаю, 0a - возврат каретки, запустите этот

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