Orale Date型とTimeStamp型を使用するサンプル

OraleのDate型とTimeStamp型を使用するサンプルです。

確認環境
・Oracle Express Edition 11g Release 2
・Windows 10

目次

DATE型 DATE型
  date型をもつテーブルを作成する
  date型の項目を更新する
  date型の項目をselectする
  SYSDATEで1日後と1日前を取得する
TIMESTAMP型 TIMESTAMP型
  timestamp型をもつテーブルを作成する
  timestamp型の項目を更新する
  timestamp型の項目をselect する

DATE型

  • 年、月、日、時、分、秒を持ちます。ミリ秒がありません。
  • 文字列をDate型にするには、TO_DATE関数を使用します。
  • Date型を文字列にするには、TO_CHAR関数を使用します。

date型をもつテーブルを作成する

date型をもつテーブルをcreate tableで作成します。

CREATE TABLE "HR"."SYAIN1" 
("ID"   NUMBER(6,0), 
"NAME"  VARCHAR2(20), 
"DATE1" DATE,  
PRIMARY KEY ("ID")
);

4行目は、Date型です。桁数は不要です。

date型の項目を更新する

上記テーブルに対してupdate文でDate型の項目を更新します。

UPDATE syain1
SET date1 = TO_DATE('2020/05/04 22:30:10','YYYY-MM-DD HH24:MI:SS')
WHERE id = 1;

UPDATE syain1
SET date1 = '2020/05/04 22:45:15'
WHERE id = 2;

UPDATE syain1
SET date1 = '20200504 23:00:05'
WHERE id = 3;

UPDATE syain1
SET date1 = SYSDATE
WHERE id = 4;

2行目は、TO_DATE関数を使用してDate型のカラムを更新しています。HH24は0~23の24時間表記です。MIは分で0~59です。SSは秒で0~59です。
6行目は、TO_DATE関数を使わず文字列のままですが更新できます。
10行目は、年月日の区切りのスラッシュを入れていませんが更新できます。
14行目は、SYSDATEを指定しています。

結果

登録後のテーブルは、以下のとおりです。

syain1テーブル
id name date1
1 鈴木 2020/05/04 22:30:10
2 田中 2020/05/04 22:45:15
3 佐藤 2020/05/04 23:00:05
4 竹田 2020/05/04 0:50:06

4行目の時間は1桁です。

date型の項目をselectする

date型の項目をselectするサンプルです。

SELECT TO_CHAR(date1, 'YYYY-MM-DD HH24:MI:SS')
FROM syain1
where id = '4';
-- 2020-06-14 00:41:14

SELECT date1
FROM syain1
where id = '4';
-- 2020/06/14 0:41:14

1行目は、TO_CHAR関数で値を取得しています。
時間が9時など1桁の場合は09の2桁で表示されます。
6行目は、関数を使用せず値を取得しています。

SYSDATEで1日後と1日前を取得する

--2020/06/15 22:19:13のとき
-- 1日後
SELECT sysdate + 1 FROM dual; -- 2020/06/16 22:19:13

-- 1日前
SELECT sysdate - 1 FROM dual; -- 2020/06/14 22:19:13

3行目は、sysdateに+1しています。1日後が表示されます。
6行目は、sysdateに-1しています。1日前が表示されます。

TIMESTAMP型

TIMESTAMP型をもつテーブルを作成する

TIMESTAMP型をもつテーブルをcreate tableで作成します。

CREATE TABLE "HR"."SYAIN2" 
("ID"   NUMBER(6,0), 
"NAME"  VARCHAR2(20), 
"TIME1" TIMESTAMP,  
PRIMARY KEY ("ID")
);

4行目は、TIMESTAMP型です。桁数を指定しない場合はデフォルト値の6で設定されます。桁数は秒の小数部を意味します。

TIMESTAMP型の項目を更新する

上記テーブルに対してupdate文でTIMESTAMP型の項目を更新します。

UPDATE syain2
SET time1 = TO_TIMESTAMP('2020/05/04 22:30:10.123', 'YYYY-MM-DD HH24:MI:SS.FF')
WHERE id = 1;
--SET time1=TO_TIMESTAMP('2020/05/04 22:30:10.123456', 'YYYY-MM-DD HH24:MI:SS.FF')

UPDATE syain2
SET time1 = '2020/05/04 22:45:15.250'
WHERE id = 2;

UPDATE syain2
SET time1 = '20200504 23:00:05.399'
WHERE id = 3;

UPDATE syain2
SET time1 = systimestamp
WHERE id = 4;

2行目は、TO_TIMESTAMP関数を使用してTIMESTAMP型のカラムを更新しています。HH24は0~23の24時間表記です。MIは分で0~59です。SSは秒で0~59です。FFは秒の小数部です。
4行目は、秒の小数部の桁数を6桁にしましたが3桁までしか更新されません。
7行目は、TO_TIMESTAMP関数を使わず文字列のままですが更新できます。
11行目は、年月日の区切りのスラッシュを入れていませんが更新できます。
15行目は、systimestampを指定しています。

結果

登録後のテーブルは、以下のとおりです。

syain1テーブル
id name time1
1 鈴木 2020/05/04 22:30:10.123
2 田中 2020/05/04 22:45:15.250
3 佐藤 2020/05/04 23:00:05.399
4 竹田 2020/05/04 0:15:25.123

4行目の時間は1桁です。

TIMESTAMP型の項目をselect する

SELECT TO_CHAR(time1, 'YYYY-MM-DD HH24:MI:SS.FF3')
FROM syain2
where id = '4';
-- 2020-06-14 00:24:43.252

SELECT time1
FROM syain2
where id = '4';
-- 2020/06/14 0:24:43.252

1行目は、TO_CHAR関数で値を取得しています。
時間が9時など1桁の場合は09の2桁で表示されます。FF3は秒の小数部が3桁表示されます。
6行目は、関数を使用せず値を取得しています。秒の小数部は3桁表示されます。

関連の記事

Oracle DDL文で作成するサンプル

△上に戻る