sql >> Database >  >> RDS >> Oracle

Gedrag van de functie rest() in Oracle begrijpen

De mensen die de documentatie hebben geschreven (die zich sommige definities uit de rekenkunde niet lijken te herinneren) lijken zelf onzeker over wat ze hebben geschreven. Aan de ene kant noemen ze al vroeg in de uitleg ROUND - maar later, wanneer ze een meer formele definitie geven, zeggen ze

"Integer dichtstbijzijnde" is niet formeel gedefinieerd in de rekenkunde, en het is inderdaad toegestaan ​​om die naam te gebruiken voor ronde (x), behalve wanneer het fractionele deel van x precies 0,5 is, in welk geval "integer dichtstbijzijnde" dubbelzinnig is en men kan ervoor kiezen om gebruiken "naar beneden afronden" als hun eigen definitie van "geheel getal het dichtst bij."

Raak niet te boos over dergelijke inconsistenties in de documentatie, als je kunt. Je zult er nog veel meer zien.

Echter :Wat VEEL erger is, is dat het gedrag inconsistent is. Ik gebruik Oracle 12.1, en op mijn computer heb ik het net geprobeerd en ik krijg

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

Geen rijm of reden. Veel beter om je eigen divisie te doen, met behulp van FLOOR en dergelijke.

Bewerken - Of misschien is er een reden; misschien gebruiken ze een definitie van "dichtstbijzijnde gehele getal" om, in het geval van een gelijkspel, het dichtstbijzijnde even te betekenen geheel getal. Produceert nog steeds onverwachte resultaten, het is het beste om de REMAINDER()-functie van Oracle niet te gebruiken.




  1. Hoe Oracle count (distinct) over partitie in Postgres te implementeren

  2. Meerdere MySQL-instanties die op dezelfde machine worden uitgevoerd controleren - ClusterControl Tips &Tricks

  3. Oracle - Indexgebruik met optionele parameters

  4. OracleCommand SQL-parameters Binding