Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle - Mengapa nol di depan angka hilang saat mengonversinya TO_CHAR

Saya sedang mencari cara untuk memformat angka tanpa spasi, titik, nol di depan atau di belakang (kecuali satu nol di depan untuk angka kurang dari 1 yang seharusnya ada).

Ini membuat frustrasi karena pemformatan yang paling biasa tidak dapat dicapai dengan mudah di Oracle.

Bahkan Tom Kyte hanya menyarankan solusi rumit yang panjang seperti ini:

case when trunc(x)=x
    then to_char(x, 'FM999999999999999999')
    else to_char(x, 'FM999999999999999.99')
end x

Tetapi saya dapat menemukan solusi yang lebih pendek yang menyebutkan nilai hanya sekali:

rtrim(to_char(x, 'FM999999999999990.99'), '.')

Ini berfungsi seperti yang diharapkan untuk semua nilai yang mungkin:

select 
    to_char(num, 'FM99.99') wrong_leading_period,
    to_char(num, 'FM90.99') wrong_trailing_period,
    rtrim(to_char(num, 'FM90.99'), '.') correct
from (
  select num from (select 0.25 c1, 0.1 c2, 1.2 c3, 13 c4, -70 c5 from dual)
  unpivot (num for dummy in (c1, c2, c3, c4, c5))
) sampledata;

    | WRONG_LEADING_PERIOD | WRONG_TRAILING_PERIOD | CORRECT |
    |----------------------|-----------------------|---------|
    |                  .25 |                  0.25 |    0.25 |
    |                   .1 |                   0.1 |     0.1 |
    |                  1.2 |                   1.2 |     1.2 |
    |                  13. |                   13. |      13 |
    |                 -70. |                  -70. |     -70 |

Masih mencari solusi yang lebih singkat.

Ada pendekatan pemendekan dengan fungsi pembantu khusus:

create or replace function str(num in number) return varchar2
as
begin
    return rtrim(to_char(num, 'FM999999999999990.99'), '.');
end;

Tetapi fungsi pl/sql khusus memiliki overhead kinerja yang signifikan yang tidak cocok untuk kueri berat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tutorial Oracle sql :Membatasi kumpulan data

  2. Kueri dua tabel dari skema yang berbeda

  3. Cara mendapatkan lat dan long dari sdo_geometry di Oracle

  4. Cara menjalankan skrip SQL Plus di PowerShell

  5. Alternatif untuk LIMIT dan OFFSET untuk paging di Oracle