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

ORACLE-ORA-01843:有効な月ではありません

    行を見てください:

    OD.DATE2 BETWEEN '08/03/2015' AND '08/03/2016'
    

    次に、'08/03/2015' および'08/03/2016' 文字列リテラルであり、日付ではありません。

    Oracleは、NLS_DATE_FORMATを使用して、文字列リテラルから日付への暗黙的な変換を試みます。 フォーマットマスクとしてのセッションパラメータ。これが機能しない場合は、エラーがスローされます。

    簡単な解決策は、文字列リテラルを使用するのではなく、代わりに日付リテラルを使用することです。

    SELECT 'M'||to_char( DATE2, 'MM' ) PERIODE,
            count(*) DATA,
            DCCPT
    FROM    BDD
    WHERE   BDD   = 'phone'
    AND     SENS  = 'Ent'
    AND     DCCPT IN ( 'PIOLUC' )
    AND     DATE2 BETWEEN DATE '2015-03-08' AND DATE '2016-03-08'
    GROUP BY
            'M'||to_char( DATE2, 'MM' ),
            DCCPT
    

    ただし、フォーマットマスクを指定することもできます:

    OD.DATE2 BETWEEN TO_DATE( '08/03/2015', 'DD/MM/YYYY' ) AND TO_DATE( '08/03/2016', 'DD/MM/YYYY' )
    


    1. データベースでPIIを分類、検索、マスクする方法…

    2. SIDの代わりにサービス名を使用してOracleに接続する方法

    3. MySQLUNION句

    4. ORA-21700:オブジェクトが存在しないか、ODP.NETから呼び出された入力パラメータとして連想配列の削除のマークが付けられています