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

Откуда:
Сообщений: 52
К примеру сущ-ет число, его нужно разделить на 97, и мне нужно узнать остаток результата.
declare
@Ost decimal (38)
set @Ost = 1010101010101010101010101010
set @Ost = @Ost - floor(@Ost/97)*97
select @Ost --резульат вернёт 72
--------------------------
если же число увеличить до 38 разрядов (что мне и нужно сделать), к примеру
declare
@Ost decimal (38)
set @Ost = 10101010101010101010101010101010101010
set @Ost = @Ost - floor(@Ost/97)*97
select @Ost -- происходит переполнение
Arithmetic overflow error converting expression to data type numeric.

Подскажите, что в это случае делать ? как вычеслить остаток такого числа ?
26 окт 09, 11:50    [7837480]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

?

set @Ost = @Ost % 97

Posted via ActualForum NNTP Server 1.4

26 окт 09, 11:55    [7837510]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
on-user
Member

Откуда:
Сообщений: 52
daw

?

set @Ost = @Ost % 97


сами пробовали ?
26 окт 09, 12:06    [7837564]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
on-user
daw
set @Ost = @Ost % 97
сами пробовали ?
Ну попробовал и чё?
declare @Ost decimal (38)
set @Ost = 10101010101010101010101010101010101010
set @Ost = @Ost % 97
select @Ost -- 82
26 окт 09, 12:10    [7837588]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
iljy
Member

Откуда:
Сообщений: 8711
on-user
daw

?

set @Ost = @Ost % 97


сами пробовали ?

я попробовал
declare
@Ost decimal (38)
set @Ost = 10101010101010101010101010101010101010
set @Ost =@Ost%97
select @Ost 
И? Результат 82.
26 окт 09, 12:32    [7837775]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
on-user
Member

Откуда:
Сообщений: 52
у меня выдает ошибку на %
Operand type clash: int is incompatible with void type
Operand data type numeric is invalid for modulo operator.
26 окт 09, 13:36    [7838229]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
Anddros
Member

Откуда:
Сообщений: 1077
on-user
у меня выдает ошибку на %
Operand type clash: int is incompatible with void type
Operand data type numeric is invalid for modulo operator.


2000-й что ли?

select @@version  
что скажет?
26 окт 09, 13:48    [7838341]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
iljy
Member

Откуда:
Сообщений: 8711
on-user
у меня выдает ошибку на %
Operand type clash: int is incompatible with void type
Operand data type numeric is invalid for modulo operator.

select @@version ?
26 окт 09, 13:49    [7838351]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Для 2000-го. Нахождение остатка 'в столбик' :
declare @Ost decimal (38)
set @Ost = 10101010101010101010101010101010101010

select @Ost=((
	cast(left(cast(@Ost as varchar(38)),len(@Ost)-30) as bigint)%97*power(cast(10 as bigint),15)+
	cast(substring(cast(@Ost as varchar(38)),len(@Ost)-29,15) as bigint))%97*power(cast(10 as bigint),15)+
	cast(substring(cast(@Ost as varchar(38)),len(@Ost)-14,15) as bigint))%97
select @Ost

:)

Работает для длинны исходного числа 30-38 символов.
26 окт 09, 14:30    [7838807]     Ответить | Цитировать Сообщить модератору
 Re: Математическое преобразование  [new]
on-user
Member

Откуда:
Сообщений: 52
да 2000
Anddros , спасибо огромное за вариант!
26 окт 09, 15:10    [7839214]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить