web-dev-qa-db-ja.com

「1985-02-07T00:00:00.000Z」(ISO8601)をOracleの日付値に変換する方法は?

タイムスタンプ( "1985-02-07T00:00:00.000Z")を日付に変換しようとしましたが、いくつかの異なる試行で成功しませんでした。

以下は私が試したクエリです:

 select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
 from dual;

あなたの提案は大歓迎です。

30
Abilash

to_dateは、入力を秒の小数部をサポートしないDATE型に変換します。秒の小数部を使用するには、to_timestampを使用するときに作成されるTIMESTAMPタイプを使用する必要があります

ff3修飾子に関するpstのコメントも正しいです。

書式マスクの「定数」値は二重引用符で囲む必要があります

最終的なステートメントは次のとおりです。

select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"')
from dual;
48
SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date)
  2    from dual
  3  /

CAST(TO_TIMESTAMP('
-------------------
07-02-1985 00:00:00

1 row selected.
10
Rob van Wijk
SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR')
FROM dual;

External table DDL,
extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR'
3
Charlie 木匠

いくつかの 従うべき規則

  1. リテラルは二重引用符で囲む必要があります:MMは月数を、_"MM"_は二重Mを期待します。
  2. 秒の小数部の形式は、FFまたはFではなく、FFFです。末尾の整数で桁数を指定します。 _FF3_。
  3. ただし、日付は小数秒を保持できないため、このコンテキストでは_FF3_を使用できません。

これは動作します:

_SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;
_

TO_DATE()に秒の小数部を無視する方法があるかどうかわからないので、文字列操作関数を使用してそれらを取り除きます。

_SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;
_
2

文字列を日時形式で取得したい場合は、これを試してください...

select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual

EVENT_DATE
-----------------------
2012-06-26 12:06:00 AM

日付の場合にのみ使用...

select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual
0
user4524067