Oracle
 sql >> база данни >  >> RDS >> Oracle

Стойностите не се показват с водеща нула в оракул

Можете да се приближите с маска като 'FM999999990D9999' , с подходящ брой 9s от всяка страна на десетичната запетая, за да покрие всички стойности, които може да имате.

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 премахва крайните нули и водещите интервали (включително номинално интервал за знак +/-).

За да се отървете и от последния десетичен маркер, трябва да го отрежете:

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;

Останах с D и в двете части на това; можете да използвате фиксиран . и в двете, така че нямате нужда от втория to_char() извикване, за да го преобразувате, но може да искате то да се контролира от сесията – така или иначе трябва да е последователно.

Ако не знаете колко 9 трябва да включите, можете да генерирате маска за формат по поръчка за всяко число въз основа на колко цифри има преди и след десетичния разделител:

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       

Това разчита на имплицитно преобразуване, но изглежда работи за положително, отрицателно и нула. Не е необходимо да се отрязва резултатът, тъй като десетичният разделител D изобщо е включен само за нецели числа.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение в PL/SQL пакетите в Oracle Database

  2. NLS_NUMERIC_CHARACTERS настройка за десетичен знак

  3. Инструменти за генериране на диаграма на база данни/ER диаграма от съществуваща база данни на Oracle?

  4. Изписване с главни букви на имената на лицата в програмирането

  5. Как да конфигурирам UTF8 набор от символи в Oracle?