Ho problemi a replicare la funzione mod in SQL sever.Numeri negativi mod in SQL proprio come Excel
In Excel, mod (-3, 7) = 4. Ma in SQL, -3% 7 = -3
Sto usando% di sbagliato, o se SQL fare mod in modo diverso?
Ho problemi a replicare la funzione mod in SQL sever.Numeri negativi mod in SQL proprio come Excel
In Excel, mod (-3, 7) = 4. Ma in SQL, -3% 7 = -3
Sto usando% di sbagliato, o se SQL fare mod in modo diverso?
Questo darà un risultato compreso tra 0 e n - 1 per entrambi i valori positivi e negativi di x:
((x % n) + n) % n
Bene, modular arithmetic viene eseguito su equivalence classes di numeri interi, quindi né Excel né alcun RDBMS "sta facendo %
sbagliato". Se si desidera un rappresentante tra 0 e 6, però, si può sempre fare
select (-3 % 7) + 7;
L'unico problema è, se il mio valore è 0, ho bisogno di un risultato di 0 –
Attendere, quindi hai una coppia di interi 'M' e' n' tale che 'M' è congruente a 0 mod 'n', ma' selezionare m% n' restituisce qualcosa di diverso da zero? –
@JackManey: la tua risposta in '(m% n) + n', questo dà' (0% n) + n = n' dove l'OP vuole che sia uguale a '0'. Questo è un sottoinsieme dei motivi per cui la risposta di MarkByers ha un '% n' aggiuntivo. – MatBailie
Abbi il coraggio di essere noioso (e in ritardo alla festa).
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
Questa roba è sopra la mia testa, ma funziona. Grazie! –
Il mio amico ha appena sottolineato che una versione più breve sarebbe (n + x)% n –
@TomHalladay: Ciò funziona per x> = -n, ma darà comunque un risultato negativo per x <-n. –