2016-06-30 1 views
1

にYYYY-MM-DDを変換:MM:SS INTO MM/DD/YYYY HH24:MM:SS私はYYYY-MM-DD HH24変換しようとしているYYYY/MM/DD

最後の試みでしたが:

SQL> select to_date(to_date('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') from dual 

私が言うエラーました:無効なmonhts、 私は非常に混乱しているの疲れを、誰もが見て取ることができますか?

+1

to_date文字列入力とオプションの文字列形式のマスクが必要です。外側to_dateをto_charに変更して、必要な書式で日付の文字列を返します。 –

答えて

1

これは動作するはずです。使用TO_CHAR

select to_char(to_date('2016-05-01 00:00:00','YYYY-MM-DD 
HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') from dual 
4

日付はフォーマットを持っていない - 彼らは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か月間無効となります。

関連する問題