日付には形式がありません。内部的には
SQL /PlusまたはSQLDeveloperの日付のデフォルトの文字列形式は、NLS_DATE_FORMAT
によって設定されます。 セッションパラメータ。他のクライアントには通常、デフォルトの日付形式に設定できるパラメータがあります(NLS
も使用しない場合) 設定)。ただし、NLS_DATE_FORMAT
はセッションパラメータであるため、ユーザーのセッションに属し、複数のユーザーはそれぞれ、設定方法に応じてパラメータに異なる値を設定できます。
日付に特定の形式を指定する場合は、それを文字列に変換する必要があります:
SELECT TO_CHAR( DATE '2016-05-01', 'MM/DD/YYYY HH24:MI:SS' )
FROM DUAL;
クエリが機能しない理由 :
TO_DATE( value, frmt )
文字列値とフォーマットマスクが必要です。内部のTO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
は完全に有効であり、DATE '2016-05-01'
を返します。 。
ただし、外側のTO_DATE()
その後、DATE
が渡されます 生成したばかりのタイプと文字列形式(予期している2つの文字列の代わりに)。 Oracleは暗黙的にTO_CHAR()
を呼び出します 日付にNLS_DATE_FORMAT
を使用します フォーマットマスクとしてのセッションパラメータ。これは、日付から文字列を生成し、エラーが発生した場合は、NLS_DATE_FORMAT
の値を生成します。 MM/DD/YYYY HH24:MI:SS
ではありません したがって、外側のTO_DATE()
暗黙的に作成された文字列を解析しようとしますが、最初に読み取った数値が1か月間無効であるため、失敗します。