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

W jaki sposób liczba Oracle NUMBER może mieć skalę większą niż precyzja?

Zgodnie z dokumentacją Oracle:

Oto jak to widzę :

  • Kiedy Precision jest większa niż Skala (np. NUMBER(8,5) ), nie ma problemu, to jest proste. Precision oznacza, że ​​liczba będzie miała łącznie 8 cyfr, z których 5 jest częścią ułamkową (.→), więc część całkowita (←.) będzie miała 3 cyfry. To jest łatwe.
  • Gdy zobaczysz, że Precision jest mniejszy niż Scale (np. NUMBER(2, 5) ), oznacza to 3 rzeczy:

    • Liczba nie będzie miała żadnej części całkowitej, tylko część ułamkową. Więc 0 w części całkowitej nie jest liczone w obliczeniach, mówisz 0,12345, a nie 0,12345. W rzeczywistości, jeśli podasz tylko 1 cyfrę w części całkowitej, zawsze zwróci błąd.
    • Scale reprezentuje całkowitą liczbę cyfr w części ułamkowej, którą będzie mieć liczba. 5 w tym przypadku. Może to być .12345 lub .00098, ale łącznie nie więcej niż 5 cyfr.
    • Część ułamkowa jest podzielona na 2 części, liczby znaczące i zera. Znaczące liczby są określone przez Precision , a minimalna liczba zer jest równa (Scale - Precision ). Przykład :

    tutaj Liczba musi mieć co najmniej 3 zera w części ułamkowej. po których następują 2 znaczące liczby (również może mieć zero). Czyli 3 zera + 2 znaczące liczby =5, czyli Scale numer.

W skrócie, gdy zobaczysz na przykład NUMBER(6,9) , to mówi nam, że część ułamkowa będzie miała w sumie 9 cyfr, zaczynając od obowiązkowych 3 zer, po których następuje 6 cyfr.

Oto kilka przykładów:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zestaw znaków Oracle JDBC i limit 4000 znaków

  2. Jak zamienić kolumnę na rzędy w Oracle 10g

  3. Jak ustawić limit czasu połączenia Oracle db w aplikacji Spring Boot?

  4. Wdrażanie witryny ASP.NET z ODP.NET

  5. Nie mogę użyć zmiennej wiążącej w datagrip