日付はフォーマットを持っていない - 彼らは7- or 8- bytesによって内部的に表現されています。それは、クライアントプログラムが(潜在的に)それにフォーマットを与えるクライアントプログラムに日付が渡されたときだけです。
SQL/PlusまたはSQL Developerの日付のデフォルトの文字列形式は、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か月間無効となります。
出典
2016-06-30 09:57:51
MT0
to_date文字列入力とオプションの文字列形式のマスクが必要です。外側to_dateをto_charに変更して、必要な書式で日付の文字列を返します。 –