Mam problem z replikowaniem funkcji mod w sewerze SQL.Numery ujemne w języku SQL podobnie jak Excel
w programie EXCEL mod (-3, 7) = 4 A w SQL, -3% 7 = -3
używam% niewłaściwy lub nie SQL do modyfikacji inaczej?
Mam problem z replikowaniem funkcji mod w sewerze SQL.Numery ujemne w języku SQL podobnie jak Excel
w programie EXCEL mod (-3, 7) = 4 A w SQL, -3% 7 = -3
używam% niewłaściwy lub nie SQL do modyfikacji inaczej?
To daje wynik między 0 a n - 1 zarówno dla dodatnich i ujemnych wartości x:
((x % n) + n) % n
Cóż, modular arithmetic jest wykonywana na equivalence classes liczb całkowitych, więc ani Excel, ani żaden RDBMS nie "wykonuje niewłaściwego" wykonywania %
". Jeśli chcesz się z pracownikiem pomiędzy 0 i 6, choć zawsze można zrobić
select (-3 % 7) + 7;
Jedynym problemem jest to, czy moja wartość jest równa 0, muszę wyniku 0 –
czekaj, więc masz parę liczb całkowitych '' n' m' i takie, że 'm' przystaje do 0 mod 'n', ale' select m% n' zwraca coś innego niż zero? –
@JackManey: Twoja odpowiedź w '(m% n) + n', daje' (0% n) + n = n', gdzie OP chce, żeby było równe '0'. To jest podzespół powodów, dla których odpowiedź MarkByers ma dodatkowe '% n'. – MatBailie
Odważ się być nudnym (i spóźnionym na przyjęcie).
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
Te rzeczy są nad moją głową, ale to działa. Dzięki! –
Mój przyjaciel właśnie zwrócił uwagę, że krótsza wersja będzie (n + x)% n –
@TomHalladay: To działa dla x> = -n, ale nadal daje wynik ujemny dla x <-n. –