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'的新时区进行更改。

热门文章

优秀文章