sql >> Database teknologi >  >> RDS >> Oracle

Værdier vises ikke med indledende nul i oracle

Du kan komme tæt på med en maske som 'FM999999990D9999' , med et passende antal 9 på hver side af decimalen for at dække alle værdier, du måtte have.

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 fjerner efterfølgende nuller og indledende mellemrum (inklusive et nominelt mellemrum for et +/- tegn).

For også at slippe af med den efterfølgende decimalmarkør skal du trimme den af:

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;

Jeg har holdt mig til D i begge dele af det; du kan bruge en fast . i begge, så du behøver ikke den anden to_char() opkald for at konvertere det, men du ønsker måske, at det skal kontrolleres af sessionen - uanset hvad skal det være konsekvent.

Hvis du ikke ved, hvor mange 9'ere du skal inkludere, kan du generere en skræddersyet formatmaske for hvert tal, baseret på hvor mange cifre der er før og efter decimalseparatoren:

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       

Dette er afhængigt af implicit konvertering, men ser ud til at virke for positiv, negativ og nul. Det behøver ikke at trimme resultatet, fordi decimalseparatoren D kun er inkluderet for ikke-heltal.



  1. Hvordan opretter man programmæssigt en ODBC-linket tabel til en SQL Server-visning og får den redigerbar?

  2. Hvordan håndterer jeg åbning/lukning af Db-forbindelse i en Go-app?

  3. hvordan man får sidste indsættelses-id efter indsæt forespørgsel i kodeigniter aktiv post

  4. Trin for trin R12.2.6 EBS-installation på Virtual Box Part -2