2009-05-08 17 views
0

セイI号:Oracle - 既存の日付から日付を作成するにはどうすればいいですか?

select date_field from table1; 

DATE_FIELDは、私は月とその逆で日付フィールドの位置を変更しようとします'25 .11.2009' のようなものです。 >私はない'01、日付の1を取得 - (もちろん日間> 12のいくつかの操作)

TO_DATE(MOD(SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 4, 2), 12) || '.' || 
       SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 1, 2) || 
       SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 6, 4), 
      'DD.MM.YYYY') 

THINGはMOD()関数からの戻り値は、すなわち2009年7月1日のために、数あるということです' 予想通り。後で私は日付を得ることができません。 問題へのショートカットソリューションはありますか?

答えて

0

イル]>「私は何とかテスト環境で使用するために、従業員の日付を雇う実際に、日付を匿名化しています。」

ここにあなたの実際の要件がありました。いくつかの日付を変更する場合は、日付/文字列変換関数(TO_CHAR/TO_DATE)を使用する必要はありません。 Oracleは日付値の算術演算を直接サポートしています。

あなたがあなたの日付をランダム化したい場合は、なぜ同じようなものを使用しない:

select date_field + dbms_random.value * 100 from table1; 
0

これは機能しますか?

TO_DATE(TO_CHAR(a.A_DATE, 'DD/MM/YYYY'), 'MM/DD/YYYY') 
+0

は私に、「ORA-01843ない有効な月」エラーが発生します。 – yli

+2

もちろん、日数は1から31までです。月は1から12の間でなければなりません。質問をすると、何を達成しようとしていますか? –

+0

私は、テスト環境で使用するために、実際に日付を匿名化しています。 – yli

1

Iが使用: CASE MOD(SUBSTR(TO_CHAR(a.birthday、 'DD.MM.YYYY')、1、2)、12) 1 THEN '01' 2 THEN 'を02' WHEN 3 THEN '03' WHEN 4 THEN '04' WHEN 5 THEN '05' WHEN 6 THEN '06' WHEN 7 THEN '07' WHEN 8 THEN '08' 9 THEN '09 ' 時には10 THEN' 10 ' 時11時11分 時12時12分 終了 非常にエレガントしかし作品:)

+1

LPAD(TO_CHAR(a.birthday、 'DD')、2、 '0') –

+0

申し訳ありませんが、LPAD(MOD(TO_CHAR(a。 –

+0

実際には、MOD式の出力は1と12の間ではなく0と11の間にあるため、可能なすべての入力に対しては機能しません。 –

0

ないあなたはTO_CHAR(<date>, '<format>')を試みたことがありますか?

4

あなたがしたいことを真剣に再考する必要があると思われます。

私は何をし始めたことは、例えば、あなたは、単に日付の書式を変更したいということだと思います'25 .11.2009 'を'11 .25.2009'に変更してください。

DATE_FIELDが実際にDATE型の場合、フィールドに格納さは固有の書式設定はありません。特定の日時を表す数値です。 SQLPlusやその他のツールでSELECTを選択すると、テキストに書式設定されますが、その書式はテーブルに格納されません。

あなたが特定の形式で日付を表示したい場合は、あなたがそれを強制するためにTO_CHAR関数を使用します。また、NLS_DATE_FORMATを使用して、単一のセッション、単一のクライアント、またはデータベース全体のデフォルトのフォーマット・モデルを設定することもできます。

関連する問題