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

Откуда:
Сообщений: 3
Есть таблица с числами:

id(bigint)number(int)
720575940437125771
1441151880816405132
2161727821195684493
-9223372036848991167128
6773695314547721281350
33093947596813281935631277


Помогите написать функцию для получения числа в поле id из числа в поле number.
27 фев 19, 09:21    [21820191]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
aleks222
Member

Откуда:
Сообщений: 919
Студент?

Ну... линейную интерполяцию замути.
27 фев 19, 10:35    [21820263]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleks222
Студент?

Ну... линейную интерполяцию замути.

ну точно не линейная
27 фев 19, 10:47    [21820268]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
court
Member

Откуда:
Сообщений: 1985
declare @t table (id bigint, number int)
insert into @t values
(72057594043712577,	1),
(144115188081640513,	2),
(216172782119568449,	3),
(-9223372036848991167,	128),
(6773695314547721281,	350),
(3309394759681328193,	5631277)

--	********************************************************
;with cte as (
	select 
		*
		,cast(id as varbinary) as xz 
		,cast(number as varbinary) as xz1 
		,master.sys.fn_varbintohexstr(cast(reverse(left(cast(cast(id as varbinary) as varchar),4))as varbinary)) as xz_txt 
	from @t
)
select 
	* 
	,id_from_xz_txt = cast(convert(xml,'').value('xs:hexBinary(substring(sql:column("xz_txt"),3))','binary(4)') as int)
from cte

idnumberxzxz1xz_txtid_from_xz_txt
7205759404371257710x01000000005844410x000000010x000000011
14411518808164051320x02000000005844410x000000020x000000022
21617278211956844930x03000000005844410x000000030x000000033
-92233720368489911671280x80000000005844410x000000800x00000080128
67736953145477212813500x5E010000005844410x0000015E0x0000015e350
330939475968132819356312770x2DED5500005844410x0055ED2D0x0055ed2d5631277
27 фев 19, 11:37    [21820309]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
court,

а так нельзя?
CAST(CAST(number as varbinary) as int) 
27 фев 19, 11:44    [21820320]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
court
Member

Откуда:
Сообщений: 1985
TaPaK
court,

а так нельзя?
CAST(CAST(number as varbinary) as int) 
что это ?
Получение number путём "двойной перегонки" через cast из того же number ? :)

-------------------
автор
Помогите написать функцию для получения числа в поле id из числа в поле number.

Я, кстате, ТС-а неправильно понял ...
Ему нужен id из number, а я сделал наоборот : number из id ...
27 фев 19, 11:53    [21820335]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
court,

CAST(CAST(convert(varbinary,reverse(convert(varbinary,number))) + 0x00584441 as varbinary) as bigint)
27 фев 19, 11:58    [21820345]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
court
TaPaK
court,

а так нельзя?
CAST(CAST(number as varbinary) as int) 
что это ?
Получение number путём "двойной перегонки" через cast из того же number ? :)

то мне сразу так показалось что вы это и сделали :)
27 фев 19, 12:04    [21820357]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
aleks222
Member

Откуда:
Сообщений: 919
TaPaK
aleks222
Студент?

Ну... линейную интерполяцию замути.

ну точно не линейная


Кубический сплайн ему не по зубам.
27 фев 19, 12:23    [21820383]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
Alexander Us
Member

Откуда:
Сообщений: 1126
Korai
Есть таблица с числами:

id(bigint)number(int)
720575940437125771
1441151880816405132
2161727821195684493
-9223372036848991167128
6773695314547721281350
33093947596813281935631277


Помогите написать функцию для получения числа в поле id из числа в поле number.


Студент, даю подсказку:

select 
  cast(72057594043712577 as bigint)
| cast(144115188081640513 as bigint)

-->216172782119568449


но дальше думай сам.
27 фев 19, 13:01    [21820448]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
Korai
Member

Откуда:
Сообщений: 3
TaPaK
court,

CAST(CAST(convert(varbinary,reverse(convert(varbinary,number))) + 0x00584441 as varbinary) as bigint)


Это то что нужно. Получилось проще чем я думал. Не совсем была понятна логика преобразования.

Спасибо всем кто ответил, отдельное спасибо TaPaK.
27 фев 19, 13:07    [21820458]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Korai,

тут спасибо court, до него я вообще не понимал о чём это :)

и отдельное спасибо Alexander Us за здоровый смех, который продлевает жизнь
27 фев 19, 13:08    [21820460]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование чисел  [new]
Alexander Us
Member

Откуда:
Сообщений: 1126
TaPaK
и отдельное спасибо Alexander Us за здоровый смех, который продлевает жизнь

Всегда пожалуйста.
Вы бы рассказали, что смешного, остальные бы тоже посмеялись.
27 фев 19, 13:50    [21820524]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить