Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zrozumienie zachowania funkcji reszta() w Oracle

Ludzie, którzy napisali dokumentację (którzy wydają się nie pamiętać niektórych definicji z arytmetyki) sami wydają się być niepewni tego, co napisali. Z jednej strony na początku wyjaśnienia wspominają ROUND - ale później, gdy podają bardziej formalną definicję, mówią

„Najbliższa liczba całkowita” nie jest formalnie zdefiniowana w arytmetyce i rzeczywiście można używać tej nazwy dla round(x), chyba że część ułamkowa x wynosi dokładnie 0,5, w którym to przypadku „najbliższa liczba całkowita” jest niejednoznaczna i można wybrać użyj "zaokrąglenia w dół" jako własnej definicji "najbliższej liczby całkowitej".

Nie denerwuj się zbytnio takimi niespójnościami w dokumentacji, jeśli możesz. Zobaczysz o wiele więcej.

Jednak :DUŻO gorsze jest to, że zachowanie jest niespójne. Używam Oracle 12.1, a na moim komputerze właśnie próbowałem i otrzymałem

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

Bez ładu i składu. Dużo lepiej zrobić własny podział, używając FLOOR i tym podobnych.

Edytuj - A może jest jakiś powód; być może używają definicji „najbliższej liczby całkowitej”, aby w przypadku remisu oznaczać najbliższą parzystą liczba całkowita. Nadal daje nieoczekiwane wyniki, najlepiej nie używać funkcji Oracle REMAINDER().




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Join na wartościach null

  2. Oracle DBMS_LOB.INSTR i zawiera wydajność

  3. Zmaterializowany widok z Oracle

  4. Zaokrąglanie do 2 miejsc po przecinku w SQL

  5. Zapytanie Java z DB Link nie zamyka połączenia Db Link