Tengo problemas para replicar la función mod en el servidor SQL.Números mod negativos en SQL como excel
en Excel, mod (-3, 7) = 4. Pero en SQL, -3% 7 = -3
Estoy usando% equivocado, o no hacer SQL mod diferente?
Tengo problemas para replicar la función mod en el servidor SQL.Números mod negativos en SQL como excel
en Excel, mod (-3, 7) = 4. Pero en SQL, -3% 7 = -3
Estoy usando% equivocado, o no hacer SQL mod diferente?
Esto le dará un resultado entre 0 y N - 1 para los valores positivos y negativos de x:
((x % n) + n) % n
Bueno, modular arithmetic se hace en equivalence classes de números enteros, por lo que ni Excel ni ningún RDBMS está "haciendo %
mal". Si desea que un representante entre 0 y 6, sin embargo, siempre se puede hacer
select (-3 % 7) + 7;
El único problema es, si mi valor es 0, necesito un resultado de 0 –
Espere, por lo que tiene un par de enteros 'm' y 'n' tal que' m' es congruente con 0 mod 'n', pero' select m% n' devuelve algo distinto de cero? –
@JackManey: Su respuesta en '(m% n) + n', esto da' (0% n) + n = n' donde el OP quiere que sea igual a '0'. Ese es un subconjunto de las razones por las que la respuesta de MarkByers tiene un '% n' adicional. – MatBailie
Atrévete a ser aburrido (y llegar tarde a la fiesta).
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
Esto está por encima de mi cabeza, pero eso funciona. ¡Gracias! –
Mi amigo acaba de señalar que una versión más corta sería (n + x)% n –
@TomHalladay: Eso funciona para x> = -n, pero aún dará un resultado negativo para x <-n. –