在Ruby中:
-2 % 24
=> 22
在Postgres中:
SELECT -2 % 24;
?column?
----------
-2
SELECT mod(-2,24);
mod
-----
-2
我自己可以很容易地写一个,但我很好奇Postgres是否有一个真正的模数运算,而不是分裂后的余数。
答案 0 :(得分:5)
SELECT MOD(24 + MOD(-2, 24), 24);
将返回22而不是-2
答案 1 :(得分:0)
似乎我找不到比以下更容易的东西:
CREATE OR REPLACE FUNCTION modulus(dividend numeric, divisor numeric) RETURNS numeric AS $$
DECLARE
result numeric;
BEGIN
divisor := ABS(divisor);
result := MOD(dividend, divisor);
IF result < 0 THEN
result := result + divisor;
END IF;
RETURN result;
END;
$$ LANGUAGE plpgsql;
答案 2 :(得分:0)
对于a_horse_with_no_name提出的副问题的答案是迟来的: 是的,这是在SQL标准中指定的。并且上述供应商都遵守。