2017-11-15 5 views
-2

私は07-OCT-2017の日付を持っています。私はそれを20171007としてOracleに変換する必要があります。オラクルのDD-MMM-YYYYからYYYYMMDDに変更

Below code doesn't work for me 
select To_date(to_char('07-OCT-2017','DD-MMM-YYYY'), 'yyyymmdd') from dual; 
+2

あなたは、日付または文字列をしたいですか?今は日付に変換しています。データの保存方法は変わりません。 –

答えて

1

多すぎる砂糖。

select to_char(to_date('07-JUL-2017', 
          'DD-MON-YYYY', 
          'NLS_DATE_LANGUAGE = American'), 
       'YYYYMMDD') from dual; 

利回り

TO_CHAR(
-------- 
20170707 

詳細を修正。あなたが提示したデータと一致するように質問を編集してください。 まだ、これが役立つことを願っています。

+2

'NLS_DATE_FORMAT'が' DD-MON-YYYY'と一致しないか、 'NLS_DATE_LANGUAGE'または' NLS_TERRITORY'が言語と一致しない場合、 'TO_DATE('07 -JUL-2017 ')'は失敗します。これらの設定はユーザーセッションごとです。ユーザーが変更することができます。デフォルトはユーザーの場所に依存するので、(特に国際機関では)一貫性を持たせるべきではありません。 [TL; DR]は、書式モデルを明示的に指定することなく、テキスト月を使用している場合は、その言語も使用して、TO_DATE()を使用しません。 – MT0

+0

編集ありがとうございます。 –

0

私は07-OCT-2017の日付を持っています。私はそれを20171007としてOracleに変換する必要があります。

日付(テーブルに格納されています)は、7 bytesで表されます。これらの日付に関連付けられているフォーマットはありません。それらが文字列として書式設定されている場合、これはデータベースにアクセスするために使用しているクライアントプログラムで、独自の書式を日付に適用します(通常はそのプログラムの環境設定で設定できます)。 TO_DATEを使用して、

SELECT DATE '2017-10-07' FROM DUAL; 

か::

だから、あなたは、日付リテラルを使用して、日付を取得することができ

SELECT TO_DATE('07-OCT'2017', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English') 
FROM DUAL; 

ただし、使用しているクライアントプログラムはにそれらの7バイトに変換しますユーザーがデフォルトの日付形式を使用して理解できるもの。この既定の形式は、this answerを使用するSQL Developerで

  • で変更できます。
  • SQL/Plusを使用してこのthis answer

あなたのデフォルト設定を変更したり、あなたがあなたの日付を変換する必要があります他のユーザーのための形式で表示する必要がしたくない場合は(内部的に7バイトなしTO_CHARを使用してフォーマットされた文字列の形式):

SELECT TO_CHAR(DATE '2017-10-07', 'YYYYMMDD') FROM DUAL; 

または

SELECT TO_CHAR(
     TO_DATE('07-OCT'2017', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English'), 
     'YYYYMMDD' 
     ) 
FROM DUAL; 
関連する問題