Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 перекодировка 16-ричного числа в десятиричное  [new]
dmitry
Guest
Существуют ли в MSSQL функции с помощью которых можно пререкодировать шестнадцатироичное число в обычное?
29 авг 01, 12:20    [13229]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Функций, кажется, нет. Зато есть процедура (недокументированная, так что использование на свой страх и риск) xp_varbintohexstr.
Когда мне нужна именно функция, я делаю следующий финт ушами - завожу user error
exec sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = '%x', @replace = 'replace'
и по месту использую
select '0x' + formatmessage(50001, 0x1234)

У formatmessage есть неприятная особенность - она неправильно работает с binary типом. А с varbinary все нормально.
29 авг 01, 12:56    [13230]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
dmitry
Guest
А какой синтаксис у xp_varbintohexstr?
29 авг 01, 14:07    [13231]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
declare @val varchar(100)
exec master..xp_varbintohexstr 0x1234, @val out
select @val
30 авг 01, 06:07    [13232]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
dmitry
Guest
не совсем понял
При данном написании она возвращает 0x1234
если в качестве первого параметра поставить строку она ее преобразуе но явно не в десятичную форму
Какого типа должен быть первый параметр?
И можно ли значение типа varchar (например '0xE4') передать в переменныю типа varbinary ,без конвертации (т.е. со значением 0xE4)
30 авг 01, 09:23    [13233]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
Glory
Guest
Получилось нечто такое

DECLARE @x varchar(10), @mysql_str nvarchar(500), @y varbinary(10)
SET @x = 'EA'

SET @mysql_str = 'set @y1 = 0x' + @x
exec sp_executesql @mysql_str, N'@y1 varbinary(10) output ', @y1=@y output
print @y

Только нужно IMHO до этого проверять входную символьную строку на предмет содержания только разрешенных для шестнадцатиричной системы симолов.
30 авг 01, 10:05    [13234]     Ответить | Цитировать Сообщить модератору
 RE:перекодировка 16-ричного числа в десятиричное  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
А, черт, я торможу. Конечно, мой пример - это строковое отображение шестнадцатиричного числа. У меня недавно такая проблема возникла, вот мысли ею и забиты. Если надо в целое переводить, то это простое использование функции convert
select convert(int, 0x01A6) выдаст 422.
30 авг 01, 10:32    [13235]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: перекодировка 16-ричного числа в десятиричное  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
К сожалению не получается использовать exec sp_executesql в функции.

Only functions and some extended stored procedures can be executed from within a function.

Как бы написать функцию перевода строки с шестнадцатеричным числом в десятичное?
29 май 09, 12:03    [7243468]     Ответить | Цитировать Сообщить модератору
 Re: перекодировка 16-ричного числа в десятиричное  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
первое что нашлось поиском
29 май 09, 12:07    [7243506]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить