Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / перевод целого числа в строковое шестнадцатиричное / 9 сообщений из 9, страница 1 из 1
10.01.2002, 12:23
    #32020460
zubov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
Что-то ничего в голову не идет как можно быстро организовать подобное преобразование.
Получить из числа, например, 10 строковое '0A'.Есть идеи?
...
Рейтинг: 0 / 0
10.01.2002, 12:48
    #32020463
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
Я пользуюсь таким немного странным приемом: создаю фиктивный message

exec sp_addmessage @msgnum = 50007, @severity = 16, @msgtext = '%X', @replace = 'replace' -- it's not the error; using for string representation of hex digits

а потом пишу что-нибудь вроде select formatmessage(50007, @i), где @i - целое число. formatmessage возвращает строку. Остается только прилепить к ней префикс Ox, если это нужно.

В MSSQL заявлена процедура xp_sprintf, аналог сишной процедуры, но:
1) это именно процедура, а не функция, что часто неудобно
2) она понимает пока только %s параметр
...
Рейтинг: 0 / 0
10.01.2002, 13:56
    #32020468
3BEPb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
используй User Define Function
...
Рейтинг: 0 / 0
10.01.2002, 14:44
    #32020471
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
Да понятно, что это элементарно оформляется в виде UDF. Мне хотелось показать сам прием. Кстати, будет интересно, если кто-нибудь приведет другое решение. Написать такое преобразование с использованием cast и convert мне так и не удалось.
...
Рейтинг: 0 / 0
10.01.2002, 14:51
    #32020474
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
2GreenSunrise
А мне лично понравилось ваше решение
, тем более что функцию нужно "таскать" из базы в базу
...
Рейтинг: 0 / 0
10.01.2002, 15:05
    #32020475
перевод целого числа в строковое шестнадцатиричное
А есть еще в MSSQL2000 функция master.dbo.fn_varbintohexstr(<value&gt
...
Рейтинг: 0 / 0
10.01.2002, 15:41
    #32020479
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
Угу. Есть. Сейчас точно не вспомню, но у меня были какие-то проблемы с binary при ее использовании. Поэтому ею и не пользуюсь. Не varbinary, а именно binary. Сегодня уже времени нет посмотреть, а завтра гляну...
...
Рейтинг: 0 / 0
11.01.2002, 06:42
    #32020514
BiSas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод целого числа в строковое шестнадцатиричное
На до же сколько способов есть, а я сам писал функцию, да еще название похожее оказалось. Брал за основу процедуру которая создавалась в примере из BOL для 7.0 . Пример был по использованию процедур sp_OA.....
А integer вместо varbinary преобразовываю уже другой функцией.


CREATE FUNCTION dbo.fn_BinaryToHexStr(@BinValue varbinary(3998 ))
Returns varchar(8000)
AS
begin
DECLARE @CharValue varchar(8000),
@i int,
@Length int,
@HexString char(16),
@TempInt int,
@FirstInt int,
@SecondInt int

set @CharValue = '0x'

set @i = 1
set @Length = DATALENGTH(@BinValue)
set @HexString = '0123456789ABCDEF'

WHILE (@i <= @Length)
BEGIN
set @TempInt = CONVERT(int, SUBSTRING(@BinValue,@i,1))
set @FirstInt = FLOOR(@TempInt/16)
set @SecondInt = @TempInt - (@FirstInt*16)
set @CharValue = @CharValue + SUBSTRING(@HexString, @FirstInt+1, 1) +
SUBSTRING(@HexString, @SecondInt+1, 1)
set @i = @i + 1
END

return @CharValue
end
GO

create function fn_IntToHex(@iValue int)
returns varchar(10)
as
begin
Return dbo.fn_BinaryToHexStr(convert(varbinary(4),@iValue))
end
go

select dbo.fn_IntToHex(1882400001)
/*
Результат:

----------
0x70332501
*/
...
Рейтинг: 0 / 0
11.01.2002, 06:54
    #32020517
перевод целого числа в строковое шестнадцатиричное
2GreenSunrise

А человеку не надо ни varbinary, ни binary. Ему надо int. А функция master.dbo.fn_varbintohexstr самым чудесным образом кушает целое значение.

select master.dbo.fn_varbintohexstr(10)

--------------------------------------------------
0x0000000a

(1 row(s) affected)


declare @i bigint
set @i=87723458722345
select master.dbo.fn_varbintohexstr(@i)

--------------------------------------------------
0x00004fc8b5987a29

(1 row(s) affected)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / перевод целого числа в строковое шестнадцатиричное / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]