#日期时间型
日期时间型是时间维度上的数据类型,多用于时间维度上的数据提取和分析。可进一步将类型划分为:
- 日期时间类型(Date&Time Data Type):表示某个日期或时刻。具体包括日期(DATE)、时间(TIME)、时间戳(TIMESTAMP)三个数据类型。
- 间隔类型(Interval Data Type):表示两个日期或时刻之间的间隔长度。具体包括年到月间隔(INTERVAL YEAR TO MONTH)、天到秒(INTERVAL DAY TO SECOND)两个数据类型。
# 日期类型(Date Data Type)
日期类型存储了与时区无关的逻辑日历信息,其信息包括年、月、日(时、分、秒)。 可通过set命令来设置date格式。
# 存储属性
类型 | 字节长度 | 取值范围 | 精度 |
---|---|---|---|
DATE | 8 | 0001-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 秒 |
# 数据格式
DATE类型的默认格式为YYYY-MM-DD,也可以按类似YYYY-MM-DD [HH[24]][:MI][:SS]的标准格式进行指定,其中各字符含义为:
- YYYY:以四位数字表示的年份,取值范围[0001,9999]。
- MM:以一位或两位数字表示的月份,取值范围[1,12]。
- DD:以一位或两位数字表示的日期,取值范围[1,31]。
- HH[24]:以一位或两位数字表示的小时,24表示24小时制,取值范围[0,23]。
- MI:以一位或两位数字表示的分钟,取值范围[0,59]。
- SS:以一位或两位数字表示的秒钟,取值范围[0,59]。
示例
CREATE TABLE date_date(C1 DATE);
INSERT INTO date_date VALUES ('2020-01-01');
INSERT INTO date_date VALUES ('2020-1-1');
COMMIT;
SELECT C1 FROM date_date;
C1
--------------------------------
2020-01-01 00:00:00
2020-01-01 00:00:00
# 时间类型(Time Data Type)
时间类型表示一日以内的时间,包含时、分、秒和微秒。
# 存储属性
类型 | 字节长度 | 取值范围 | 精度 |
---|---|---|---|
TIME | 8 | 00:00:00.000000 ~ 23:59:59.999999 | 微秒 |
# 数据格式
按类似HH[24][:MI][:SS][.FF] 的标准格式进行指定,其中各字符含义为:
- HH[24]:以一位或两位数字表示的小时,24表示24小时制,取值范围[0,23]。
- MI:以一位或两位数字表示的分钟,取值范围[0,59]。
- SS:以一位或两位数字表示的秒钟,取值范围[0,59]。
- FF:以一位到六位数字表示的微秒,取值范围[0,999999]。
对TIME类型执行字符串转换时,上面标准格式里的所有部分可以从低位向上省略,省略的部分按0补位。
示例
CREATE TABLE date_time(C1 TIME);
INSERT INTO date_time VALUES ('23:59:59.999999');
INSERT INTO date_time VALUES ('2:5:5');
INSERT INTO date_time VALUES ('1:2');
COMMIT;
SELECT C1 FROM date_time ;
C1
--------------------
23:59:59.999999
02:05:05.000000
01:02:00.000000
# 时间戳类型(Timestamp Data Type)
时间戳类型是信息最为全面的日期时间类型,其信息包含了年、月、日、时、分、秒、微秒。
# 存储属性
类型 | 字节长度 | 取值范围 | 精度 |
---|---|---|---|
TIMESTAMP | 8 | 1-1-1 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 | 微秒 |
# 数据格式
按类似YYYY-MM-DD [HH[24]][:MI][:SS][.FF]的标准格式进行指定,其中各字符含义为:
- YYYY:以四位数字表示的年份,取值范围[0001,9999]。
- MM:以一位或两位数字表示的月份,取值范围[1,12]。
- DD:以一位或两位数字表示的日期,取值范围[1,31]。
- HH[24]:以一位或两位数字表示的小时,24表示24小时制,取值范围[0,23]。
- MI:以一位或两位数字表示的分钟,取值范围[0,59]。
- SS:以一位或两位数字表示的秒钟,取值范围[0,59]。
- FF:以一位到六位数字表示的微秒,取值范围[0,999999]。
Note:
微秒的特殊处理:
- 在数据类型定义时,微秒精度可定义范围为0~9,但输出的实际精度值为6。
- 系统可以接收0~9位数字的微秒输入,但会将其补齐或四舍五入到6位。
示例
CREATE TABLE date_timestamp (C1 TIMESTAMP);
INSERT INTO date_timestamp VALUES ('2020-01-01 12:30:30.123456');
INSERT INTO date_timestamp VALUES ('2020-1-1 12:30:30.123456');
INSERT INTO date_timestamp VALUES ('2020-1-1');
COMMIT;
SELECT C1 FROM date_timestamp;
C1
----------------------------------------------------------------
2020-01-01 12:30:30.123456
2020-01-01 12:30:30.123456
2020-01-01 00:00:00.000000
--可定义最大9的微秒精度,但实际存储精度为6
CREATE TABLE timestamp_test(c1 TIMESTAMP(3));
INSERT INTO timestamp_test VALUES('2012-1-1 1:1:1.123456789');
SELECT c1 res FROM timestamp_test;
RES
----------------------------------------------------------------
2012-01-01 01:01:01.123457
# 年到月间隔类型(Interval Year To Month Data Type)
年到月间隔类型表示以年月为单位的时间间隔。
# 存储属性
类型 | 字节长度 | 取值范围 | 精度 |
---|---|---|---|
INTERVAL YEAR TO MONTH | 4 | -178000000-00 ~ 178000000-00 | 月 |
# 定义格式
年到月间隔类型的定义格式为INTERVAL YEAR [(year_precision)] TO MONTH。year_precision:表示年的精度,取值范围[0,9],省略时取默认值2。
Note:
00-00特殊处理:
在年精度最大值9以内,和月精度最大值2以内,输入任意个0,都将被视为'00',而不受定义格式里所指定的精度限制。
# 数据格式
按YYYY-MM
标准格式或INTERVAL 'YYYY' YEAR(MM)
指定:
- YYYY:年份,有效值为-178000000到178000000。
- MM:月份,有效值为0到11。
示例
CREATE TABLE date_iytm (no INT, c1 INTERVAL YEAR(4) TO MONTH);
INSERT INTO date_iytm VALUES(1,'1000-10');
INSERT INTO date_iytm VALUES(2,'1000-0');
INSERT INTO date_iytm VALUES(3,'000000000-11');
INSERT INTO date_iytm VALUES(4,INTERVAL '1000' YEAR(9));
INSERT INTO date_iytm VALUES(5,INTERVAL '11' MONTH);
COMMIT;
SELECT no,c1 FROM date_iytm ORDER BY no;
NO C1
------------ ---------------
1 +1000-10
2 +1000-00
3 +00-11
4 +1000-00
5 +00-11
# 天到秒间隔类型(Interval Day To Second Data Type)
天到秒间隔类型表示以天、时、分、秒、微秒为单位的时间间隔。
# 存储属性
类型 | 字节长度 | 取值范围 | 精度 |
---|---|---|---|
INTERVAL DAY TO SECOND | 8 | -100000000 00:00:00.000000 ~ 100000000 00:00:00.000000 | 微秒 |
# 定义格式
天到秒间隔类型的定义格式为INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)]
,其中:
- day_precision:表示天的精度,语法支持[0,9],实际取值范围[0,8]。
- fractional_seconds_precision:表示微秒的精度,取值范围[0,9]。
(day_precision)
省略时,系统取默认值2;(fractional_seconds_precision)
省略时,系统取默认值6。
# 数据格式
该类型的标准格式为DD HH:MI:SS[.FF]
或INTERVAL 'DD' DAY(day_precision)
或INTERVAL 'HH' HOUR或INTERVAL 'MI:SS.DDDDDD' MINUTE TO SECOND(fractional_seconds_precision)
,各字符含义为:
- DD:日期,取值范围[-100000000,100000000 ]。
- HH:小时,取值范围[0,23 ]。
- MI:分钟,取值范围[0,59 ]。
- SS:秒钟,取值范围[0,59 ]。
- FF:微秒,取值范围[0,999999 ]。
Note:
微秒的特殊处理:
- 在数据类型定义时,微秒精度可定义范围为0~9,但输出的实际精度值为6。
- 系统可以接收0~9位数字的微秒输入,但会将其补齐或四舍五入到定义的精度(定义的精度大于6时按6处理)。
示例
CREATE TABLE date_idts(no INT, c1 INTERVAL DAY(9) TO SECOND(9));
INSERT INTO date_idts VALUES(1,'50 10:30:59.999999');
INSERT INTO date_idts VALUES(2,'50 00:00:59.999999');
INSERT INTO date_idts VALUES(3,'00 10:30:00.000000');
INSERT INTO date_idts VALUES(4,'50 00:00:00.000000');
INSERT INTO date_idts VALUES(5,INTERVAL '50' DAY(6));
INSERT INTO date_idts VALUES(6,INTERVAL '10' HOUR);
INSERT INTO date_idts VALUES(7,INTERVAL '30:59.9' MINUTE TO SECOND(6));
INSERT INTO date_idts VALUES(8,INTERVAL '30:59.9999999' MINUTE TO SECOND(6));
INSERT INTO date_idts VALUES(9,INTERVAL '30:59.9999990' MINUTE TO SECOND(6));
INSERT INTO date_idts VALUES(10,INTERVAL '30:59.9999990' MINUTE TO SECOND(3));
INSERT INTO date_idts VALUES(11,INTERVAL '30:59.999999567' MINUTE TO SECOND(8));
COMMIT;
SELECT no,c1 FROM date_idts ORDER BY no;
NO C1
------------ --------------------------------
1 +50 10:30:59.999999
2 +50 00:00:59.999999
3 +00 10:30:00.000000
4 +50 00:00:00.000000
5 +50 00:00:00.000000
6 +00 10:00:00.000000
7 +00 00:30:59.900000
8 +00 00:31:00.000000
9 +00 00:30:59.999999
10 +00 00:31:00.000000
11 +00 00:31:00.000000