sql >> Databáze >  >> RDS >> Oracle

Hodnoty se v orákulu nezobrazují s úvodní nulou

Můžete se přiblížit pomocí masky jako 'FM999999990D9999' , s příslušným počtem 9s na každé straně desetinné čárky, aby byly pokryty všechny hodnoty, které můžete mít.

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 odstraní koncové nuly a úvodní mezery (včetně nominální mezery pro znaménko +/-).

Chcete-li se zbavit i koncové desetinné značky, musíte ji oříznout:

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;

Zůstal jsem u D v obou částech toho; můžete použít pevný . v obou, takže nepotřebujete druhý to_char() call to převést, ale možná budete chtít, aby to bylo řízeno relací – v každém případě to musí být konzistentní.

Pokud nevíte, kolik devítek musíte zahrnout, můžete pro každé číslo vygenerovat masku formátu na míru podle toho, kolik číslic je před a za oddělovačem desetinných míst:

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       

To se opírá o implicitní konverzi, ale zdá se, že funguje pro kladné, záporné a nulové hodnoty. Není nutné ořezávat výsledek, protože desetinný oddělovač D je zahrnut pouze pro necelá čísla.



  1. Jak spojit dvě tabulky v MySQL

  2. Jak mohu importovat databázi s MySQL z terminálu?

  3. Postgresql vloží spoušť na nastavenou hodnotu

  4. Primární klíč SQLite