sql >> Databasteknik >  >> RDS >> Oracle

Hur kan ett Oracle NUMBER ha en skala större än precisionen?

Enligt Oracle Documentation:

Så här ser jag det :

  • När Precision är större än skala (t.ex. NUMBER(8,5) ), inga problem, det här är enkelt. Precision betyder att talet kommer att ha totalt 8 siffror, varav 5 är i bråkdelen (.→), så heltalsdelen (←.) kommer att ha 3 siffror. Det här är enkelt.
  • När du ser den Precision är mindre än Scale (t.ex. NUMBER(2, 5) ), betyder detta 3 saker :

    • Numret kommer inte att ha någon heltalsdel, bara bråkdel. Så nollan i heltalsdelen räknas inte med i beräkningarna, du säger .12345 inte 0.12345. Faktum är att om du bara anger en siffra i heltalsdelen kommer det alltid att returnera ett fel.
    • Scale representerar det totala antalet siffror i bråkdelen som talet kommer att ha. 5 i detta fall. Så det kan vara .12345 eller .00098 men inte mer än 5 siffror totalt.
    • Bråkdelen är uppdelad i 2 delar, signifikanta tal och nollor. Betydande tal anges med Precision , och minsta antal nollor är lika med (Scale - Precision ). Exempel:

    här Numret ska ha minst 3 nollor i bråkdelen. följt av 2 signifikanta tal (kan också ha en nolla). Så 3 nollor + 2 signifikanta tal =5 vilket är Scale nummer.

Kort sagt, när du till exempel ser NUMBER(6,9) , detta talar om för oss att bråkdelen kommer att ha 9 siffror totalt, som börjar med obligatoriska 3 nollor och följs av 6 siffror.

Här är några exempel:

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


  1. hur lagrar man en tolkad xml-fil i en SQLite-databas i Android?

  2. Behöver hjälp med korrekt SQL

  3. BREAK-sats i PL/pgSQL

  4. Dela upp kommaseparerade värden i enskilda rader