Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 В чем фокус преобразований varbinary=>varchar  [new]
Lukich
Member

Откуда: Зелик
Сообщений: 275
Может кто в курсе, как обойти ошибку?

declare @bin varbinary(16)
set @bin = 0x31303137313837303800000000000000

declare @chr varchar(50)
select @chr = cast(@bin as varchar(50))
select @chr
/*--------------------------------------------------
101718708  
*/

select cast(replace(@chr,'.','') as int)
/*-----------
Msg 245, Level 16, State 1, Line 11
Conversion failed when converting the varchar value '101718708.......' to data type int.
*/
1 сен 16, 13:56    [19617263]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
buven
Member

Откуда:
Сообщений: 792
Lukich,

А вот так
declare @bin varbinary(16)
set @bin = 0x313031373138373038--00000000000000

declare @chr varchar(50)
select @chr = cast(@bin as varchar(50))
select ltrim(@chr)
/*--------------------------------------------------
101718708  
*/

select cast(@chr as int)


работает:)
1 сен 16, 14:23    [19617454]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
buven
Member

Откуда:
Сообщений: 792
buven,
ltrim там кстати тоже не нужен
1 сен 16, 14:24    [19617466]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
Lukich,

declare @bin varbinary(16)
set @bin = 0x31303137313837303800000000000000

declare @chr varchar(50)
select @chr = cast(left(@bin, charindex(0x00, @bin) - 1) as varchar(50))
select @chr
/*--------------------------------------------------
101718708  
*/

select cast(@chr as int)


А в чем задача-то? Изобретательно изувечить строку чтобы потом с блеском ее разбирать?
1 сен 16, 14:29    [19617493]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
Lukich
Member

Откуда: Зелик
Сообщений: 275
Спасибо!
Методом тыка пришел к тому что срабатывает
cast(cast(@chr as float) as int)
вместо
select cast(@chr as int)

Чудеса)
1 сен 16, 14:38    [19617553]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Lukich,

двоичный ноль никак не выкинешь из строки, мы для этого написали CLR функцию, которая выбрасывает символы < 0h20 заменяет на проблелы.
1 сен 16, 17:52    [19618510]     Ответить | Цитировать Сообщить модератору
 Re: В чем фокус преобразований varbinary=>varchar  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
Владислав Колосов,

declare @bin varbinary(16)
set @bin = 0x31303137313837303800000000000000

declare @chr varchar(50)
select @chr = REPLACE(cast(@bin as varchar(50)) COLLATE Cyrillic_General_BIN, CHAR(0), '')

select cast(replace(@chr,'.','') as int)
1 сен 16, 21:55    [19619207]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить