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

Oracleの日付から先行ゼロを削除する方法

    Oracle Databaseでは、fmを使用できます。 (塗りつぶしモード)日付に適用される可能性のある先行ゼロを抑制するためのフォーマット修飾子。このフォーマット修飾子は、先行ゼロと末尾ブランクを含むパディングを抑制します。

    fmを使用するには format修飾子。日付のフォーマット方法を指定するときに、フォーマットモデルに含めます。たとえば、TO_CHAR()を使用する場合 日付をフォーマットする関数、またはNLS_DATE_FORMATなどのNLSパラメーター 現在のセッションの日付形式を設定するときのパラメータ。

    デモンストレーションの例を次に示します。

    SELECT 
        TO_CHAR(DATE '2009-08-01', 'DD-MM-YY') AS "Without fm",
        TO_CHAR(DATE '2009-08-01', 'fmDD-MM-YY') AS "With fm"
    FROM DUAL;

    結果:

       Without fm    With fm 
    _____________ __________ 
    01-08-09      1-8-9     

    元の結果(fmなし)がわかります 修飾子)は、すべての日付部分の先行ゼロを返します。この場合、fm 修飾子は、3つの日付部分すべての先行ゼロを抑制しました。

    fm 修飾子は、結果に実際に先行ゼロがある場合にのみ結果に影響します。

    これは、2桁を占めるため、先行ゼロがない日付部分を含む日付です。

    SELECT 
        TO_CHAR(DATE '2029-12-01', 'DD-MM-YY') AS "Without fm",
        TO_CHAR(DATE '2029-12-01', 'fmDD-MM-YY') AS "With fm"
    FROM DUAL;

    結果:

       Without fm    With fm 
    _____________ __________ 
    01-12-29      1-12-29    

    一部の日付部分でのみ塗りつぶしモードを指定する方法

    上記の例では、すべての日付部分の先行ゼロが抑制されています。先行ゼロは、日、月、および年から削除されました。これは、単一のfmを配置すると フォーマットモデルの開始時に、すべてを抑制します。 結果の後続の先行ゼロ。

    日と月から先行ゼロのみを削除し、年にそれを保持したいとします。この場合、次のことができます。

    SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-MM-fmYY')
    FROM DUAL;

    結果:

    1-8-09

    fm モディファイアは基本的にスイッチのように機能します。 1つを含めると、最後まで、または別のfmに遭遇するまでゼロを抑制します。 修飾子。 2番目のfmがある場合 修飾子の場合、先行ゼロはそのポイントを超えて抑制されません。

    3つのfmを含めると次のようになります 修飾子–各日付部分の前に1つ:

    SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-fmMM-fmYY')
    FROM DUAL;

    結果:

    1-08-9

    したがって、この場合、fm 修飾子は基本的に有効にされ、次に無効にされ、次に再び有効にされました。

    NLSパラメータ

    NLS_DATE_FORMATなどのNLSパラメータで塗りつぶしモードを指定することもできます 現在のセッションの日付形式を設定するときのパラメータ。

    例:

    ALTER SESSION SET NLS_DATE_FORMAT = 'fmDD-MM-fmRR';
    
    SELECT DATE '2009-08-07' FROM DUAL;

    結果:

    7-8-09

    1. Oracleの隠し機能

    2. SQL SELECT構文–DBMSによってリストされます

    3. PostgreSQLスキーマのテーブルを一覧表示します

    4. DBAの〜/.psqlrcファイル