目次
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を指定しています。
登録後のテーブルは、以下のとおりです。
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型にするには、TO_TIMESTAMP関数を使用します。
- TIMESTAMP型を文字列にするには、TO_CHAR関数を使用します。
- TIMESTAMP(6)の6は、小数部の桁を意味します。
https://docs.oracle.com/cd/E16338_01/server.112/b56307/ch4datetime.htm#i1006050
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を指定しています。
登録後のテーブルは、以下のとおりです。
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日前が表示されます。
関連の記事