2016-01-18 4 views
0

Пожалуйста, смотрите ниже SQL:В ролях VARBINARY к VARCHAR

select substring(hash1,1,4) from (
    select hashbytes('SHA1', 'Ian' + 'Maria') as hash1 
    ) as hashtable 

, которая возвращает:

0xC0326BA0 

Есть восемь символов возвращается: т.е. 0x + 8 символов. Почему возвращается 8 символов? Я понимаю, что это простой вопрос, но сегодня мне не удалось найти ответ.

ответ

4

При использовании SUBSTRING на типе двоичных данных, он возвращает length байт, а не символов, поэтому в данном случае, вы получаете обратно четыре байта C0, 32, 6B и A0.

Если вам действительно нужно ровно 4 символов случайных двоичных данных интерпретируется как строка, вы можете сделать это:

select substring(CAST(hash1 as varchar(4)),1,4) from (
    select hashbytes('SHA1', 'Ian' + 'Maria') as hash1 
    ) as hashtable 

Но это не обязательно будет представлять собой данные, что означает, что угодно.

+1

никогда не произносятся как varchar без указания размера варчара. В выборе это будет по умолчанию 30 символов, но я знаю, что я столкнулся с другими местами, где он по умолчанию равен 1. В любом случае вы не должны быть неаккуратными по этому поводу. Что делать, если вы произносили что-то большее, чем 30 символов. Поэтому каждый раз, когда вы это делаете, вы строите плохую привычку, которая вернется, чтобы укусить вас в конечном итоге. – HLGEM

+0

@HLGEM Я исправил бросок. –

Смежные вопросы