sql >> Databasteknik >  >> RDS >> Oracle

Värden visas inte med inledande noll i oracle

Du kan komma nära med en mask som 'FM999999990D9999' , med ett lämpligt antal 9s på varje sida av decimalen för att täcka alla värden du kan ha.

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 tar bort efterföljande nollor och inledande mellanslag (inklusive ett nominellt mellanslag för ett +/--tecken).

För att bli av med den efterföljande decimalmarkören också måste du trimma bort den:

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;

Jag har fastnat för D i båda delarna av det; du kan använda en fast . i båda så att du inte behöver den andra to_char() anrop för att konvertera det, men du kanske vill att det ska styras av sessionen – oavsett hur det måste vara konsekvent.

Om du inte vet hur många 9:or du behöver inkludera kan du skapa en skräddarsydd formatmask för varje nummer, baserat på hur många siffror det finns före och efter decimalavgränsaren:

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       

Detta förlitar sig på implicit konvertering men verkar fungera för positiv, negativ och noll. Den behöver inte trimma resultatet eftersom decimalavgränsaren D bara ingår alls för icke-heltal.



  1. Finns det något sätt att kontrollera prestanda för mysql-indexering

  2. GreenDao freemaker.jar saknas

  3. hur ser ett B-trädindex på mer än 1 kolumn ut?

  4. EM 12c Justering av tröskelvärden