sql >> データベース >  >> RDS >> Oracle

Oracleでは値が先行ゼロで表示されていません

    'FM999999990D9999'のようなマスクで近づくことができます 、あなたが持っているかもしれないすべての値をカバーするために、小数点の両側に適切な数の9があります。

    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にこだわっています その両方の部分で;固定の.を使用できます 両方で、2番目の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. PHPPDOプリペアドステートメント

    2. CONV()–MySQLの異なるベース間で数値を変換する

    3. Entity FrameworkCode-FirstInitializerでデータベース照合を設定します

    4. PHPでPostgreSQLに接続できないpg_connect()