Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с беззнаковыми двойными словами в T-SQL / 6 сообщений из 6, страница 1 из 1
25.06.2002, 12:51:46
    #32033790
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
SQL Server 7 имеет тип данных int. Этот тип может хранить целое число до 2,147,483,647 включительно, так как старший бит (из 4 отпущенных int’у) используется под знак.
Как поступить, если мне необходимо работать с большими целыми числами, но укладывающимися в 4 байта (иными словами, с без знаковыми)?

Пробовал тип binary(4), но конструкция вида:

Код: plaintext
1.
2.
3.
4.
declare @a binary( 4 ), @b binary( 4 )
set @a = 0x1
set @a = 0x2
select @a * @b


нежизнеспособна.
Мне необходимо выполнять различные операции над числами, например, умножение, побитовое И, ИЛИ и т.п.

Кстати, как реализовать сдвиг в право/лево на T-SQL?


Какие есть варианты?
...
Рейтинг: 0 / 0
25.06.2002, 15:19:52
    #32033821
al_r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
Вот один из вариантов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @Value int

 --сдвиг влево
 
set @Value = @Value *  2 

 --сдвиг вправо
 
set @Value = @Value /  2 

 --циклический сдвиг влево
 
set @Value = (@Value *  2 ) | (case when @Value & 0x80000000 =  0  then  0  else  1  end)

 --циклический сдвиг вправо
 
set @Value = (@Value /  2 ) | (case when @Value &  1  =  0  then  0  else 0x80000000 end)
...
Рейтинг: 0 / 0
25.06.2002, 17:14:52
    #32033845
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
al_r,

Да, действительно можно привести все к делению и умножению на степень двойки... Я просто удивлен,
что в T-SQL нет встроенной функции сдвига, думал,
что просто не нашел...

Благодарю Вас за ответ!
...
Рейтинг: 0 / 0
25.06.2002, 18:54:58
    #32033865
al_r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
Да, в общем, благодарить особо и не за что:)

Кстати, знаковость или беззнаковость числа влияет только на операции сравнения, что достаточно легко обойти.
...
Рейтинг: 0 / 0
25.06.2002, 23:45:09
    #32033886
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
>> Кстати, знаковость или беззнаковость числа влияет только на операции сравнения, что достаточно легко обойти.

Нельзя ли подробнее…
Скажем, такой фрагмент:

Код: plaintext
1.
2.
3.
declare @i int
select @i =  2147483647 * 2 
select @i


не будет работать, т.к. 2147483647*2 не входит в ‘область определения’ знаковых четырехбайтовых чисел. Я понимаю, что можно ‘мыслить’ отрицательные значения как положительные, как бы внося поправку. Но как в таком случае выполнять собственно расчеты (то же умножение)? Естественно, что если произведение получается больше размера (тех самых 4 байт), то необходимо отбросить старшую часть…
...
Рейтинг: 0 / 0
27.06.2002, 14:14:38
    #32034132
al_r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с беззнаковыми двойными словами в T-SQL
Виноват, был дурак, исправлюсь:)).
Не учел, что ловится арифметическое переполнение. Это сильно портит дело.

Варианты решения:

1. Операнды преобразовать в numeric(18,0), анализировать результат и генерить целое число.

2. Написать extended stored proc.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с беззнаковыми двойными словами в T-SQL / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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