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

目次

Date型 DATE型とは
  date型ありのテーブルを作成 / date型の列を更新 / date型の列をselect
TIMESTAMP型 TIMESTAMP型とは
  timestamp型ありのテーブルを作成 / timestamp型の列を更新 /
timestamp型の列をselect
SYSDATE SYSDATEで現在日時を取得 / SYSDATEで1日後と1日前を取得

DATE型とは

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

 

date型ありのテーブルを作成

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

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

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

 

date型の列を更新

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

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

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

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

UPDATE employee1
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を指定しています。

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

employee1テーブル
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 employee1
where id = '4';
-- 2020-06-14 00:41:14

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

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

 

TIMESTAMP型とは

 

TIMESTAMP型ありのテーブルを作成

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

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

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

 

TIMESTAMP型の列を更新

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

UPDATE employee2
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 employee2
SET time1 = '2020/05/04 22:45:15.250'
WHERE id = 2;

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

UPDATE employee2
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を指定しています。

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

employee1テーブル
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 employee2
where id = '4';
-- 2020-06-14 00:24:43.252

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

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

 

SYSDATEで現在日時を取得

SELECT SYSDATE FROM DUAL; --2020/05/06 15:40:56

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') 
FROM DUAL; --2020-05-05 15:42:33

SYSDATEは現在日時を取得します。

 

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日前が表示されます。

関連の記事

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

△上に戻る