TIMESTAMPデータ型はDATEデータ型の拡張であり、DATEデータ型の年、月、日、時、分、秒などの情報を格納するために使用されます。本記事では主にTIMESTAMPデータ型の構文、パラメータ、および使用方法について説明します。
構文
TIMESTAMP [(scale)]
パラメータ
TIMESTAMP[(scale)] の範囲と精度は scale の値によって決まり、その値の範囲は [0,9] です。最大値は9(ナノ秒、つまり秒数が小数点以下9桁まで正確)で、最小値は0(秒、つまり秒数が小数点以下0桁まで正確)で、デフォルト値は6です。
使用方法
TIMESTAMP タイムスタンプデータ型は、時間の正確性が高く、タイムゾーン変換を考慮する必要がないデータを格納するためによく使用されます。値の範囲は 0001-01-01 00:00:00.000000000 から 9999-12-31 23:59:59.999999999 です。
TIMESTAMP データ型のデフォルトの入出力形式は NLS_TIMESTAMP_FORMAT によって決定されます。デフォルトの形式を確認するには、次のSQLステートメントを実行します:
SELECT @@NLS_TIMESTAMP_FORMAT FROM DUAL;
実行結果は次のとおりです:
DD-MON-RR HH.MI.SSXFF AM
データの形式をカスタマイズする必要がある場合は、変換関数を使用できます。データを挿入する際には、関数TO_TIMESTAMP (char,fmt) を使用してデータの入力形式を指定できます。データをクエリする際には、関数TO_CHAR (datetime,fmt) を使用してデータの出力形式を指定できます。これら2つの変換関数は、文字列をパラメータ fmt で定義された形式に変換します。fmt が指定されていない場合は、デフォルトの形式が使用されます。
例
テーブル
Timestamp_Sampleに、データ型がTIMESTAMPの2つの列timestp1とtimestp2を作成し、timestp2に時間の精度を3と指定します。両列に対して同時にTO_TIMESTAMP(string, format)を使用して日付値 2020-01-01 11:00:00 を挿入します。結果から、timestp1はscaleの値が指定されていないため、結果の時間精度はデフォルトで6桁であり、timestp2は指定後の精度が3桁であることがわかります。obclient> CREATE TABLE Timestamp_Sample(timestp1 TIMESTAMP, timestp2 TIMESTAMP(3)); Query OK, 0 rows affected obclient> INSERT INTO Timestamp_Sample(timestp1,timestp2) VALUES (TO_TIMESTAMP('2020-01-01 11:00:00','YYYY-MM-DD HH24:MI:SS'), TO_TIMESTAMP('2020-01-01 11:00:00','YYYY-MM-DD HH24:MI:SS')); Query OK, 1 row affected obclient> SELECT * FROM Timestamp_Sample; +------------------------------+---------------------------+ | TIMESTP1 | TIMESTP2 | +------------------------------+---------------------------+ | 01-JAN-20 11.00.00.000000 AM | 01-JAN-20 11.00.00.000 AM | +------------------------------+---------------------------+ 1 row in set関数
TO_CHAR (datetime,fmt)を使用して出力形式を指定します。obclient> SELECT TO_CHAR(TO_TIMESTAMP_TZ('25-FEB-20 11:00:00 AM America/Los_Angeles','DD-MON-RR HH:MI:SSXFF PM TZR'),'YYYY-MM-DD HH:MI:SSXFF PM TZR') Timestamp FROM DUAL; +------------------------------------------------------+ | Timestamp | +------------------------------------------------------+ | 2020-02-25 11:00:00.000000000 AM America/Los_Angeles | +------------------------------------------------------+ 1 row in set