TO_TIMESTAMP

TO_TIMESTAMP関数は、CHARVARCHAR2CLOBまたはNCLOBの引数をTIMESTAMPデータ型の値に変換します。

SQL構文

TO_TIMESTAMP (Expression1[, Expression2 [, Expression3]])

パラメータ

TO_TIMESTAMPには、次のパラメータがあります。

パラメータ 説明

Expression1

CHARVARCHAR2CLOBまたはNCLOB式。

Expression2

Expression1の書式を指定する書式文字列。書式文字列(Expression2)を省略する場合は、Expression1TIMESTAMPデータ型のデフォルトの書式にする必要があります。TIMESTAMPデータ型のデフォルトの書式はSYYYY-MM-DD HH24:MI:SS:FF[9]です。

Expression3

NLSパラメータを指定するCHARまたはVARCHAR2式。この値は現在無視されています。

説明

  • TO_TIMESTAMP関数は、CHARVARCHAR2CLOBまたはNCLOBの式(Expression1として関数に渡される式)をTIMESTAMPデータ型の値に変換します。戻りデータ型は、TIMESTAMPです。

  • Expression2の書式文字列には、有効な日時書式要素を使用できます。詳細は、「日時書式モデル」を参照してください。

例1: この例は、TO_TIMESTAMP関数の戻りデータ型を示しています。この最大小数秒精度は9です。

Command> describe SELECT TO_TIMESTAMP ('2021-05-07 10:11:12.123456') FROM dual;
 
Prepared Statement:
  Columns:
    EXP                             TIMESTAMP (9) NOT NULL

2: この例では、文字列をTIMESTAMPデータ型に変換する場合にエラーがスローされます。Expression1TIMESTAMPデータ型の小数秒精度6を示していますが、書式文字列(Expression2)は2の値(FF2)を示しています。値を切り捨てることができず、変換エラーが発生します。

Command> SELECT TO_TIMESTAMP('2021-01-01 10:11:12.123456',
           'YYYY-MM-DD HH:MI:SS.FF2') FROM dual;
 2813: Error converting from character string '2021-01-01 10:11:12.123456' 
       to timestamp
The command failed.

例3: 次の例は、FF[n]n値が、Expression1の小数秒(この例では123456)の切り捨てが発生しないように収容できる十分な大きさにする必要があることを示しています。2番目の例のようにnの値を指定しない場合、デフォルトは9になります。

Command> SELECT TO_TIMESTAMP ('2021-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF6') FROM dual;
< 2021-05-07 10:10:10.123456 >
1 row found.

Command> select to_timestamp('2021-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF') FROM dual;
< 2021-05-07 10:10:10.123456000 >
1 row found.

例4: 次の例は、Expression1が文字列で、書式文字列が指定されている場合の結果を示しています。

Command> SELECT TO_TIMESTAMP ('2021-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF6') FROM dual;
< 2021-05-07 10:10:10.123456 >
1 row found.

Command> SELECT TO_TIMESTAMP ('2021-05-07 23:00:00.123456',
         'YYYY-MM-DD HH24:MI:SS.FF6') FROM dual;
< 2021-05-07 23:00:00.123456 >
1 row found.

5: この例では、FF書式文字列を使用しています。FFの書式では、結果に表示されているように最大精度の9が使用されます。

Command> SELECT TO_TIMESTAMP ('10-Sep-02 10:10:10.123000',
         'DD-Mon-RR HH12:MI:SS.FF') FROM dual;
< 2002-09-10 10:10:10.123000000 >
1 row found.

例6: 次の例は、書式文字列がない場合の結果を示しています。Expression1にはデフォルトの書式が使用されます。Expression1の小数秒精度(この例では123456789)はオプションです。

Command> SELECT TO_TIMESTAMP ('2021-MAY-07 101010.123456789') FROM dual;
< 2021-05-07 10:10:10.123456789 >
1 row found.

Command> SELECT TO_TIMESTAMP ('2021-MAY-07 101010') FROM dual;
< 2021-05-07 10:10:10.000000000 >
1 row found.

Command> SELECT TO_TIMESTAMP ('2021-MAY-07 101010.12') FROM dual;
< 2021-05-07 10:10:10.120000000 >
1 row found.

7: この例は、TO_TIMESTAMPTO_CHAR関数を使用して、TIMESTAMPデータ型を明示的なタイムスタンプ書式で返す方法を示しています。

Command> SELECT TO_CHAR(TO_TIMESTAMP ('2021-05-07 13:11:12.123456',
         'YYYY-MM-DD HH24:MI:SS.FF6'),'DD/MON/YYYY HH24:MI:SS.FF6 PM') FROM dual;
< 07/MAY/2021 13:11:12.123456 PM >
1 row found.

8: この例では、TIMESTAMP(9)型の列を持つ表を作成します。表を記述した後、例では、TO_TIMESTAMP関数を使用せずに1行挿入してから、TO_TIMESTAMP関数を使用して2行目を挿入します。表に対するSELECTが、2つの挿入操作の結果を示しています。

Command> CREATE TABLE ts_table(col1 TIMESTAMP(9));
Command> describe ts_table;
 
Table SAMPLEUSER.TS_TABLE:
  Columns:
    COL1                            TIMESTAMP (9)
 
1 table found.
(primary key columns are indicated with *)

Command> INSERT INTO ts_table VALUES('2021-05-04 11:12:13.999999');
1 row inserted.
Command> INSERT INTO ts_table VALUES(to_timestamp('04-05-2021 11:12:13.123456789',
         'DD-MM-YYYY HH:MI:SS.FF9'));
1 row inserted.

Command> SELECT * FROM ts_table;
< 2021-05-04 11:12:13.999999000 >
< 2021-05-04 11:12:13.123456789 >
2 rows found.

9: 次の例では、AMおよびPM書式文字列の使用を説明しています。

Command> SELECT TO_TIMESTAMP ('10-Sep-02 10:10:10.123456 PM',
         'DD-Mon-RR HH12:MI:SS.FF6 PM') FROM dual;
< 2002-09-10 22:10:10.123456 >
1 row found.

Command> SELECT TO_CHAR(TO_TIMESTAMP ('10-Sep-02 10:10:10.123456 PM', 
         'DD-Mon-RR HH12:MI:SS.FF6 PM'),'DD-Mon-RR HH12:MI:SS.FF6 PM') 
         FROM dual;
< 10-Sep-02 10:10:10.123456 PM >
1 row found.

次の例では、TIMESTAMP(9)データ型を持つcol2を定義して、ts_table2表を作成します。表を記述した後、挿入操作を実行し、AMおよびPMを使用してTIMESTAMP列にデータを挿入する方法を説明しています。

Command> CREATE TABLE ts_table2 (col1 number primary key, col2 timestamp(9));
Command> describe ts_table2;

Table SAMPLEUSER.TS_TABLE2:
  Columns:
   *COL1                            NUMBER NOT NULL
    COL2                            TIMESTAMP (9)

1 table found.
(primary key columns are indicated with *)

Command> INSERT INTO ts_table2 VALUES (100,
         TO_TIMESTAMP('10-FEB-20 12.46.48.802050 PM',
         'DD-MON-RR HH:MI:SS.FF AM'));
1 row inserted.

Command> SELECT TO_CHAR(col2) FROM ts_table2;
< 2021-02-10 12:46:48.802050000 >
1 row found.

Command> SELECT TO_CHAR (col2, 'DD-MON-RR HH:MI:SS.FF AM') from ts_table2;
< 10-FEB-20 12:46:48.802050000 PM >
1 row found.