日期/时间类型
openGauss支持的日期/时间类型请参见表1。该类型的操作符和内置函数请参见时间和日期处理函数和操作符。
说明: 如果其他的数据库时间格式和openGauss的时间格式不一致,可通过修改配置参数DateStyle的值来保持一致。
表 1 日期/时间类型
示例:
--创建表。
openGauss=# CREATE TABLE date_type_tab(coll date);
--插入数据。
openGauss=# INSERT INTO date_type_tab VALUES (date '12-10-2010');
--查看数据。
openGauss=# SELECT * FROM date_type_tab;
coll
---------------------
2010-12-10 00:00:00
(1 row)
--删除表。
openGauss=# DROP TABLE date_type_tab;
--创建表。
openGauss=# CREATE TABLE time_type_tab (da time without time zone ,dai time with time zone,dfgh timestamp without time zone,dfga timestamp with time zone, vbg smalldatetime);
--插入数据。
openGauss=# INSERT INTO time_type_tab VALUES ('21:21:21','21:21:21 pst','2010-12-12','2013-12-11 pst','2003-04-12 04:05:06');
--查看数据。
openGauss=# SELECT * FROM time_type_tab;
da | dai | dfgh | dfga | vbg
----------+-------------+---------------------+------------------------+---------------------
21:21:21 | 21:21:21-08 | 2010-12-12 00:00:00 | 2013-12-11 16:00:00+08 | 2003-04-12 04:05:00
(1 row)
--删除表。
openGauss=# DROP TABLE time_type_tab;
--创建表。
openGauss=# CREATE TABLE day_type_tab (a int,b INTERVAL DAY(3) TO SECOND (4));
--插入数据。
openGauss=# INSERT INTO day_type_tab VALUES (1, INTERVAL '3' DAY);
--查看数据。
openGauss=# SELECT * FROM day_type_tab;
a | b
---+--------
1 | 3 days
(1 row)
--删除表。
openGauss=# DROP TABLE day_type_tab;
--创建表。
openGauss=# CREATE TABLE year_type_tab(a int, b interval year (6));
--插入数据。
openGauss=# INSERT INTO year_type_tab VALUES(1,interval '2' year);
--查看数据。
openGauss=# SELECT * FROM year_type_tab;
a | b
---+---------
1 | 2 years
(1 row)
--删除表。
openGauss=# DROP TABLE year_type_tab;
日期输入
日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。
日期的文本输入需要加单引号包围,语法如下:
type [ ( p ) ] 'value'
可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入方式。
说明: 合法的日期分隔符是“-”和“/”,混用日期分隔符(“-”和“/”也不能混用)可能导致解析错误。
表 2 日期输入方式
| |
示例:
--创建表。
openGauss=# CREATE TABLE date_type_tab(coll date);
--插入数据。
openGauss=# INSERT INTO date_type_tab VALUES (date '12-10-2010');
--查看数据。
openGauss=# SELECT * FROM date_type_tab;
coll
---------------------
2010-12-10 00:00:00
(1 row)
--查看日期格式。
openGauss=# SHOW datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
--设置日期格式。
openGauss=# SET datestyle='YMD';
SET
--插入数据。
openGauss=# INSERT INTO date_type_tab VALUES(date '2010-12-11');
--查看数据。
openGauss=# SELECT * FROM date_type_tab;
coll
---------------------
2010-12-10 00:00:00
2010-12-11 00:00:00
(2 rows)
--删除表。
openGauss=# DROP TABLE date_type_tab;
时间
时间类型包括time [ (p) ] without time zone和time [ (p) ] with time zone。如果只写time等效于time without time zone。
如果在time without time zone类型的输入中声明了时区,则会忽略这个时区。
时间输入类型的详细信息请参见表3,时区输入类型的详细信息请参加表4。
表 3 时间输入
表 4 时区输入
示例:
openGauss=# SELECT time '04:05:06';
time
----------
04:05:06
(1 row)
openGauss=# SELECT time '04:05:06 PST';
time
----------
04:05:06
(1 row)
openGauss=# SELECT time with time zone '04:05:06 PST';
timetz
-------------
04:05:06-08
(1 row)
特殊值
openGauss支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考表5。
表 5 特殊值
--创建表。
openGauss=# CREATE TABLE realtime_type_special(col1 varchar(20), col2 date, col3 timestamp, col4 time);
--插入数据。
openGauss=# INSERT INTO realtime_type_special VALUES('epoch', 'epoch', 'epoch', NULL);
openGauss=# INSERT INTO realtime_type_special VALUES('infinity', NULL, 'epoch', NULL);
openGauss=# INSERT INTO realtime_type_special VALUES('now', 'now', 'now', 'now');
openGauss=# INSERT INTO realtime_type_special VALUES('today', 'today', 'today', NULL);
openGauss=# INSERT INTO realtime_type_special VALUES('tomorrow', 'tomorrow', 'tomorrow', NULL);
openGauss=# INSERT INTO realtime_type_special VALUES('yesterday', 'yesterday', 'yesterday', NULL);
--查看数据
openGauss=# SELECT * FROM realtime_type_special;
col1 | col2 | col3 | col4
-----------+---------------------+----------------------------+-----------------
epoch | 1970-01-01 00:00:00 | 1970-01-01 00:00:00 |
now | 2023-02-27 11:38:13 | 2023-02-27 11:38:13.032815 | 11:38:13.032815
today | 2023-02-27 00:00:00 | 2023-02-27 00:00:00 |
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
yesterday | 2023-02-26 00:00:00 | 2023-02-26 00:00:00 |
(5 rows)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 < 'infinity';
col1 | col2 | col3 | col4
-----------+---------------------+----------------------------+-----------------
epoch | 1970-01-01 00:00:00 | 1970-01-01 00:00:00 |
now | 2023-02-27 11:38:13 | 2023-02-27 11:38:13.032815 | 11:38:13.032815
today | 2023-02-27 00:00:00 | 2023-02-27 00:00:00 |
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
yesterday | 2023-02-26 00:00:00 | 2023-02-26 00:00:00 |
(5 rows)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 > '-infinity';
col1 | col2 | col3 | col4
-----------+---------------------+----------------------------+-----------------
epoch | 1970-01-01 00:00:00 | 1970-01-01 00:00:00 |
now | 2023-02-27 11:38:13 | 2023-02-27 11:38:13.032815 | 11:38:13.032815
today | 2023-02-27 00:00:00 | 2023-02-27 00:00:00 |
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
yesterday | 2023-02-26 00:00:00 | 2023-02-26 00:00:00 |
(5 rows)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 > 'now';
col1 | col2 | col3 | col4
----------+---------------------+---------------------+------
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
(1 row)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 = 'today';
col1 | col2 | col3 | col4
-------+---------------------+---------------------+------
today | 2023-02-27 00:00:00 | 2023-02-27 00:00:00 |
(1 row)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 = 'tomorrow';
col1 | col2 | col3 | col4
----------+---------------------+---------------------+------
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
(1 row)
openGauss=# SELECT * FROM realtime_type_special WHERE col3 > 'yesterday';
col1 | col2 | col3 | col4
----------+---------------------+----------------------------+-----------------
now | 2023-02-27 11:38:13 | 2023-02-27 11:38:13.032815 | 11:38:13.032815
today | 2023-02-27 00:00:00 | 2023-02-27 00:00:00 |
tomorrow | 2023-02-28 00:00:00 | 2023-02-28 00:00:00 |
(3 rows)
openGauss=# SELECT TIME 'allballs';
time
----------
00:00:00
(1 row)
--删除表。
openGauss=# DROP TABLE realtime_type_special;
时间段输入
reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。
时间段输入的详细信息请参考表6。
表 6 时间段输入
采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 | ||
采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 | ||
示例:
--创建表。
openGauss=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime);
--插入数据。
openGauss=# INSERT INTO reltime_type_tab VALUES ('90', '90');
openGauss=# INSERT INTO reltime_type_tab VALUES ('-366', '-366');
openGauss=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25');
openGauss=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS');
openGauss=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00');
openGauss=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M');
--查看数据。
openGauss=# SELECT * FROM reltime_type_tab;
col1 | col2
--------------------------------+-------------------------------------
1975.25 | 5 years 4 mons 29 days
-2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00
P-1.1Y10M | -3 mons -5 days -06:00:00
-366 | -1 years -18:00:00
90 | 3 mons
30 DAYS 12:00:00 | 1 mon 12:00:00
(6 rows)
--删除表。
openGauss=# DROP TABLE reltime_type_tab;