sql >> Databáze >  >> RDS >> Oracle

Porozumění chování funkce zbytku() v Oracle

Lidé, kteří napsali dokumentaci (kteří si zřejmě nepamatují některé definice z aritmetiky), si sami nejsou jisti tím, co napsali. Na jedné straně na začátku vysvětlení zmiňují ROUND - ale později, když dají formálnější definici, říkají

„Nejbližší celé číslo“ není formálně definováno v aritmetice a skutečně je povoleno používat tento název pro kolo(x), s výjimkou případů, kdy je zlomková část x přesně 0,5, v takovém případě je „nejbližší celé číslo“ nejednoznačné a lze se rozhodnout použijte "zaokrouhlení dolů" jako vlastní definici "celé číslo nejbližší."

Pokud můžete, nezlobte se příliš podobnými nesrovnalostmi v dokumentaci. Uvidíte mnoho dalších.

Nicméně :MNOHEM horší je, že chování je nekonzistentní. Používám Oracle 12.1 a na svém počítači jsem to právě zkusil a mám

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

Žádný rým ani důvod. Mnohem lepší je udělat si vlastní rozdělení pomocí FLOOR a podobně.

Upravit - Nebo možná existuje nějaký důvod; možná používají definici „nejbližšího celého čísla“, aby v případě rovnosti znamenaly nejbližší sud celé číslo. Stále přináší neočekávané výsledky. Nejlepší je nepoužívat funkci REMAINDER() společnosti Oracle.




  1. Jak opravit nevyřešený externí symbol kvůli MySql Connector C++?

  2. použít PHP k vytvoření tabulky HTML z dotazu MSQL, bez duplicitních řádků?

  3. Chyba výsledku UDF

  4. mysql error 2049 připojení pomocí starého (pre-4-1-1) ověřování z mac