PostgreSQL Timestamp类型
在本节中,我们将了解PostgreSQL Timestamp数据类型的工作原理。我们还看到了Timestamp 数据类型的示例,我们还看到了一些可访问的时间戳函数,如NOW()、CURRENT_TIMESTAMP、CURRENT_TIME、TIMEOFDAY() 和 timezone(zone, timestamp),它们帮助我们更有效地处理时间值。
什么是 PostgreSQL Timestamp数据类型?
在 PostgreSQL 中,下一个数据类型是TIMESTAMP,它可以存储TIME和DATE值。但它不支持任何时区数据。并且这意味着当我们转换我们数据库服务器的时区时,时间戳值将存储在数据库中并且不能重复修改。
在PostgreSQL中,TIMESTAMP数据类型分为两种时间数据类型,分别如下:
- timestamp
- timpstamptz
Timestamp:使用Timestamp数据类型,不带时区。
Timestamptz:timestamptz 数据类型与时区一起使用。
注意:
- timestamptz 数据类型是与时区相关的日期和时间数据类型,它是带有时区的时间戳。
- timestamp 和 timestamptz存储时间戳值的8 个字节存储空间,我们可以在以下命令中看到:
SELECT typname, typlen
FROM pg_type
WHERE typname ~ '^timestamp';
激活上述命令后,我们将得到以下输出,其中我们可以看到timestamp 和 timestamptz数据类型都存储了8 个字节的时间戳值。
在 PostgreSQL 中,timestamptz数据类型以UTC 值存储:
- 如果我们在 timestamptz 列中插入一个值,PostgreSQL 会将 timestamptz 值更改为UTC 值并将 UTC 值存储在表中。
- 如果我们从数据库请求timestamptz , PostgreSQL 会将UTC 值改回数据库服务器、当前数据库连接或用户建立的时区。
- 并且 PostgreSQL 不包含任何带有timestamptz的时区数据
PostgreSQL Timestamp数据类型的语法
PostgreSQL Timestamp 数据类型的语法如下:
TIMESTAMP
或者
TIMESTAMPTZ
PostgreSQL TIMESTAMP 数据类型示例
让我们看一个示例,以了解PostgreSQL timestamp 和 timestamptz 数据类型的工作原理。
我们正在创建一个名为ts_demo 的新表,其中包含timestamp和timestamptz数据类型以及 CREATE 命令的帮助,并使用 INSERT 命令插入一些值。
要将 ts_demo 创建到Javatpoint数据库中,我们使用CREATE命令。
ts_demo表包含两列,例如ts1 TIMESTAMP和ts2 TIMESTAMPTZ,如以下命令所示:
CREATE TABLE ts_demo (
ts1 TIMESTAMP,
ts2 TIMESTAMPTZ
);
执行上面的命令,我们会得到如下信息:ts_demo表已经创建成功。
当ts_demo表创建成功后,我们将数据库服务器的时区设置为澳大利亚/达尔文,我们可以在以下命令中看到:
SET TIMEZONE ='Australia/Darwin';
执行上述命令后,我们会得到如下消息窗口,显示时区设置成功。
如果我们想查看当前时区,可以使用如下命令,如下图:
SHOW TIMEZONE;
执行上述命令后,我们将得到以下输出:
成功将时区设置为Australia/Darwin后,我们将在INSERT命令的帮助下向其中插入一些值。
INSERT INTO ts_demo (ts1, ts2)
VALUES('2020-10-05 14:01:10-08',
'2020-10-05 14:01:10-08');
执行上述命令后,我们将得到如下消息窗口,显示特定值已成功插入到ts_demo表中。
创建并插入ts_demo 表的值后,我们将使用SELECT命令返回ts_demo表的所有行:
SELECT ts1, ts2
FROM ts_demo;
成功执行上述命令后,我们将得到以下输出,其中显示了ts_demo表中存在的时间戳值:
之后,我们将再次修改当前会话的时区为Asia/Calcutta,如下命令所示。
SET TIMEZONE = 'Asia/Calcutta';
执行上述命令后,我们将看到以下消息窗口,显示新时区已成功设置。
然后,我们将使用SELECT命令查看ts_demo表中的现有数据:
SELECT ts1, ts2
FROM ts_demo;
成功执行上述命令后,我们将检索以下结果:
正如我们所看到的,timestamp列中的两个输出值都没有修改,但是 timestamptz 列中的值可以根据'Asia/Calcutta'的新时区进行更改。
热门文章
优秀文章