在Ruby:Postgres中真正的數學「模」操作?
-2 % 24
=> 22
在Postgres裏:
SELECT -2 % 24;
?column?
----------
-2
SELECT mod(-2,24);
mod
-----
-2
我可以隨便寫一個我自己,但我很好奇的Postgres是否有一個真正的模運算,爲師後,相對於其餘部分。
在Ruby:Postgres中真正的數學「模」操作?
-2 % 24
=> 22
在Postgres裏:
SELECT -2 % 24;
?column?
----------
-2
SELECT mod(-2,24);
mod
-----
-2
我可以隨便寫一個我自己,但我很好奇的Postgres是否有一個真正的模運算,爲師後,相對於其餘部分。
SELECT MOD(24 + MOD(-2, 24), 24);
將返回22,而不是-2
行。我沒有嘗試過,但是如果第一個操作數是正數,它看起來也是有效的。太好了! –
看來,我不會找到任何東西更容易比:
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;
DBMS供應商似乎同意這裏:Oracle,SQL Server和MySQL返回與Postgres相同的東西。我不知道這是不是在SQL標準 –
中指定的,我可以找到一個較短的解決方案,請參閱我的回答 – linqu
如果您不介意的問題是什麼_a真正模operation_包括或鏈接? –
在這個問題的上下文中,我稱之爲「模數」操作在這裏返回一個叫做「r」的數字:http://en.wikipedia.org/wiki/Euclidean_division。像Common Lisp的'MOD'(與'REM'相反)。或者Ruby的'Fixnum#%'(而不是'Numeric#remaining')。這兩種操作都很重要,一種語言支持一種而不是另一種是一種弱點。 –