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

Nilai tidak ditampilkan dengan nol di depan di Oracle

Anda bisa mendekat dengan topeng seperti 'FM999999990D9999' , dengan angka 9 yang tepat di setiap sisi desimal untuk mencakup semua nilai yang mungkin Anda miliki.

with tab1 (cola) as (
         select 0.87 from dual
  union  select 661 from dual
  union  select 661.87 res from dual
  union  select 1.5 res from dual
)
select cola, to_char(cola, 'FM999999990D9999')
from tab1;

      COLA TO_CHAR(COLA,'F
---------- ---------------
       .87 0.87           
       1.5 1.5            
       661 661.           
    661.87 661.87         

FM menghilangkan nol di belakang dan spasi di depan (termasuk spasi nominal untuk tanda +/-).

Untuk menghilangkan penanda desimal tambahan, Anda juga perlu memangkasnya:

with tab1 (cola) as (
         select 0.87 from dual
  union  select 661 from dual
  union  select 661.87 res from dual
  union  select 1.5 res from dual
)
select cola, rtrim(to_char(cola, 'FM999999990D9999'), to_char(0, 'FMD'))
from tab1;

Saya terjebak dengan D di kedua bagian itu; Anda bisa menggunakan . fixed yang tetap di keduanya sehingga Anda tidak memerlukan to_char() second kedua panggil untuk mengonversinya, tetapi Anda mungkin ingin itu dikontrol oleh sesi - cara apa pun itu harus konsisten.

Jika Anda tidak tahu berapa banyak angka 9 yang perlu Anda sertakan, Anda dapat membuat format mask yang dipesan lebih dahulu untuk setiap angka, berdasarkan berapa banyak digit yang ada sebelum dan sesudah pemisah desimal:

with tab1 (cola) as (
            select 0.87 from dual
  union all select 661 from dual
  union all select 661.87 res from dual
  union all select 1.5 res from dual
  union all select 0.00045354543 from dual
)
select cola,
  'FM' || lpad('0', length(trunc(cola)), '9')
       || case when trunc(cola) != cola
               then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9')
          end as format_mask,
  to_char(cola,
    'FM' || lpad('0', length(trunc(cola)), '9')
         || case when trunc(cola) != cola
                 then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9')
            end) as result
from tab1;

           COLA FORMAT_MASK          RESULT              
--------------- -------------------- --------------------
            .87 FM0D99               0.87                
            661 FM990                661                 
         661.87 FM990D99             661.87              
            1.5 FM0D9                1.5                 
   .00045354543 FM0D99999999999      0.00045354543       

Ini bergantung pada konversi implisit tetapi tampaknya berfungsi untuk positif, negatif, dan nol. Tidak perlu memangkas hasilnya karena pemisah desimal D hanya disertakan sama sekali untuk non-bilangan bulat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01097

  2. Dapatkan nama prosedur atau fungsi pemanggilan di Oracle PL/SQL

  3. Bagaimana saya bisa membuat salinan tabel Oracle tanpa menyalin data?

  4. Fungsi agregat selama interval waktu tertentu

  5. Bagaimana cara mendapatkan jumlah baris yang terpengaruh oleh pernyataan saat berada di dalam pemicu pernyataan itu?