Mod отрицательные числа в SQL так же, как excel
У меня возникли проблемы с репликацией функции mod в SQL sever.
в excel, mod (-3, 7) = 4. Но в SQL, -3 % 7 = -3
Я использую % неправильно, или SQL делает mod по-другому?
3 ответов
Это даст результат между 0 и n-1 как для положительных, так и для отрицательных значений x:
((x % n) + n) % n
Ну модулярной арифметики делается классы эквивалентности целых чисел, поэтому ни Excel, ни какие-либо СУБД "doing %
неправильно". Если вам нужен представитель между 0 и 6, вы всегда можете сделать
select (-3 % 7) + 7;
Dare, чтобы быть скучным (и поздно на вечеринку).
declare @Modulus as Int = 7
declare @Samples as Table ( Value Int )
insert into @Samples ( Value ) values ( -12 ), ( -3 ), ( 0 ), ( 3 ), ( 13 ), ( 70 )
select Value,
case Sign( Value )
when 1 then Value % @Modulus
when -1 then Value % @Modulus + @Modulus
else 0
end as Modulus
from @Samples