sql >> Databasteknik >  >> RDS >> Oracle

Förstå beteendet för funktionen rester() i Oracle

Personerna som skrev dokumentationen (som inte verkar minnas vissa definitioner från aritmetiken) verkar själva osäkra på vad de skrivit. Å ena sidan, tidigt i förklaringen nämner de ROUND - men senare när de ger en mer formell definition säger de

"Närmast heltal" är inte formellt definierat i aritmetiken, och man är faktiskt tillåten att använda det namnet för rund(x) förutom när bråkdelen av x är exakt 0,5, i vilket fall "heltal närmast" är tvetydigt och man kan välja att använd "runda ner" som sin egen definition av "heltal närmast."

Bli inte för upprörd över sådana inkonsekvenser i dokumentationen, om du kan. Du kommer att se många fler.

Men :Vad som är MYCKET värre är att beteendet är inkonsekvent. Jag använder Oracle 12.1, och på min maskin försökte jag precis och jag fick

remainder(10, 4) =  2
remainder( 6, 4) = -2

Inget rim eller anledning. Mycket bättre att göra din egen indelning, använda FLOOR och så.

Redigera – Eller så kanske det finns någon anledning; kanske använder de en definition av "närmaste heltal" för att betyda, i fallet med oavgjort, närmaste jämna heltal. Producerar fortfarande oväntade resultat, bäst att inte använda Oracles REMAINDER()-funktion.




  1. Hur kan jag stoppa ett Postgres-skript när det stöter på ett fel?

  2. Radexpansion via * stöds inte här

  3. java.lang.NullPointerException på com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)

  4. Autoslutför i MySQL under Windows