Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann eine Oracle-ZAHL eine größere Skala als die Genauigkeit haben?

Laut Oracle-Dokumentation:

So sehe ich das:

  • Bei Precision größer als Scale ist (z. B. NUMBER(8,5) ), kein Problem, das geht ganz einfach. Precision bedeutet, dass die Zahl insgesamt 8 Ziffern hat, von denen 5 im Bruchteil (.→) stehen, sodass der ganzzahlige Teil (←.) 3 Ziffern hat. Das ist ganz einfach.
  • Wenn Sie diese Precision sehen ist kleiner als Scale (zB NUMBER(2, 5) ), das bedeutet 3 Dinge :

    • Die Zahl hat keinen ganzzahligen Teil, sondern nur einen Bruchteil. Die 0 im ganzzahligen Teil wird also bei den Berechnungen nicht mitgezählt, Sie sagen 0,12345, nicht 0,12345. Wenn Sie nur 1 Ziffer im ganzzahligen Teil angeben, wird immer ein Fehler zurückgegeben.
    • Die Scale stellt die Gesamtzahl der Ziffern im Bruchteil dar, die die Zahl haben wird. 5 in diesem Fall. Es kann also .12345 oder .00098 sein, aber insgesamt nicht mehr als 5 Ziffern.
    • Der Bruchteil wird in 2 Teile unterteilt, signifikante Zahlen und Nullen. Signifikante Zahlen werden durch Precision angegeben , und die Mindestanzahl an Nullen ist gleich (Scale - Precision ). Beispiel:

    hier Die Zahl muss mindestens 3 Nullen im Bruchteil haben. gefolgt von 2 signifikanten Zahlen (kann auch eine Null haben). Also 3 Nullen + 2 signifikante Zahlen =5, was die Scale ist Nummer.

Kurz gesagt, wenn Sie zum Beispiel NUMBER(6,9) sehen , das sagt uns, dass der Bruchteil insgesamt 9 Ziffern haben wird, beginnend mit obligatorischen 3 Nullen und gefolgt von 6 Ziffern.

Hier sind einige Beispiele:

SELECT CAST(.0000123 AS NUMBER(6,9)) FROM dual;   -- prints: 0.0000123; .000|012300
SELECT CAST(.000012345 AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|012345
SELECT CAST(.123456 AS NUMBER(3,4)) FROM dual;    -- ERROR! must have a 1 zero (4-3=1)
SELECT CAST(.013579 AS NUMBER(3,4)) FROM dual;    -- prints: 0.0136; max 4 digits, .013579 rounded to .0136