真实的,数学的"模数" Postgres的运作?

时间:2014-03-27 09:42:04

标签: sql postgresql

在Ruby中:

-2 % 24
=> 22

在Postgres中:

SELECT -2 % 24;
 ?column?
----------
      -2

SELECT mod(-2,24);
 mod
-----
  -2

我自己可以很容易地写一个,但我很好奇Postgres是否有一个真正的模数运算,而不是分裂后的余数。

3 个答案:

答案 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标准中指定的。并且上述供应商都遵守。