Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wartości nie są wyświetlane z wiodącym zerem w Oracle

Możesz się zbliżyć za pomocą maski, takiej jak 'FM999999990D9999' , z odpowiednią liczbą 9 po każdej stronie przecinka, aby pokryć wszystkie wartości, jakie możesz mieć.

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 usuwa końcowe zera i wiodące spacje (w tym spację nominalną dla znaku +/-).

Aby pozbyć się również końcowego znacznika dziesiętnego, musisz go przyciąć:

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;

Utknąłem z D w obu częściach; możesz użyć stałego . w obu, więc nie potrzebujesz drugiej to_char() zadzwoń, aby to przekonwertować, ale możesz chcieć, aby było to kontrolowane przez sesję – tak czy inaczej, musi być spójne.

Jeśli nie wiesz, ile dziewiątek musisz uwzględnić, możesz wygenerować maskę formatu na zamówienie dla każdej liczby, na podstawie liczby cyfr przed i po separatorze dziesiętnym:

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       

Opiera się to na niejawnej konwersji, ale wydaje się, że działa w przypadku dodatniego, ujemnego i zerowego. Nie trzeba przycinać wyniku, ponieważ separator dziesiętny D jest w ogóle uwzględniony tylko w przypadku liczb niecałkowitych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz swojego OEM z Grafaną za pomocą aplikacji Enterprise Manager dla Grafana

  2. Jak rozwiązać brakujące wyrażenie ORA-00936

  3. Konwertuj uniksowy znacznik czasu na wartość daty w Oracle

  4. Oracle, PDO_OCI a OCI8

  5. ORA-21700:obiekt nie istnieje lub jest oznaczony do usunięcia dla tablicy asocjacyjnej jako parametr wejściowy wywoływany z ODP.NET