PostgreSQL timestamp


PostgreSQL timestamp

在本节中,我们将了解PostgreSQL timestamp数据类型的工作原理。我们还看到了Timestamp 数据类型的**示例,我们还看到了一些可访问的timestamp函数,如NOW()、CURRENT_TIMESTAMP、CURRENT_TIME、TIMEOFDAY() 和 timezone(zone, timestamp),它们帮助我们更有效地处理时间值。

什么是 PostgreSQL timestamp数据类型?

在 PostgreSQL 中,下一个数据类型是TIMESTAMP,它可以存储TIMEDATE值。但它不支持任何时区数据。这意味着当我们转换我们的数据库服务器的时区时,timestamp值将存储在数据库中,不能重复修改。

在PostgreSQL中,TIMESTAMP数据类型分为两种时间数据类型,分别如下:

  • timestamp
  • timpstamptz

timestamp:timestamp数据类型不使用时区一

Timestamptz:timestamptz 数据类型与时区一起使用

笔记:

  • timestamptz数据类型是一个时区相关的日期和时间数据类型,它是与时区的timestamp
  • timestamp和timestamptz存储在8个字节存储的timestamp值的,因为我们可以在下面的命令看到:
SELECT typname, typlen  
FROM pg_type  
WHERE typname ~ '^timestamp';

输出

执行完上述命令后,我们将得到以下输出,我们可以看到timestamp 和timestamptz数据类型都存储了8 个字节的timestamp值。

PostgreSQL timestamp

在 PostgreSQL 中,timestamptz数据类型存储在UTC 值中

  • 如果我们在 timestamptz 列中插入一个值,PostgreSQL 会将 timestamptz 值更改为UTC 值并将UTC 值存储在表中。
  • 如果我们从数据库请求timestamptz,PostgreSQL 会将UTC 值更改回由数据库服务器、当前数据库连接或用户建立的时区
  • 并且 PostgreSQL 不包含任何带有timestamp的**时区**数据

PostgreSQL Timestamp 数据类型的语法

PostgreSQL Timestamp 数据类型的语法如下:

TIMESTAMP;

OR

TIMESTAMPTZ;

PostgreSQL TIMESTAMP 数据类型示例

让我们看一个示例示例,以了解PostgreSQL timestamp和timestamp记数据类型的工作原理。

我们正在创建一个新表作为ts_demo,\它包含带有 CREATE 命令帮助的timestamptimestamp记数据类型,并使用 INSERT 命令插入一些值。

要在Javatpoint 数据库中创建ts_demo\,我们使用CREATE命令。

所述ts_demo\表包含两列如TS1 TIMESTAMPTS2 TIMESTAMPTZ,如图以下命令:

CREATE TABLE ts_demo (  
    ts1 TIMESTAMP,   
    ts2 TIMESTAMPTZ  
);

输出

在执行上述命令时,我们将收到以下消息:ts_demo\表已成功创建。

PostgreSQL timestamp

ts_demo\表创建成功后,我们将数据库服务器的时区设置为Australia/Darwin,如下命令所示:

SET TIMEZONE ='Australia/Darwin';

输出

执行上述命令后,我们将得到如下消息窗口,显示时区设置成功。

PostgreSQL timestamp

如果我们想查看当前时区,可以使用如下命令,如下图:

SHOW TIMEZONE;

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL timestamp

成功将时区设置为澳大利亚/达尔文后,我们将在INSERT命令的帮助下向其中插入一些值。

INSERT INTO ts_demo (ts1, ts2)  
VALUES('2020-10-05 14:01:10-08',  
       '2020-10-05 14:01:10-08');

输出

执行上述命令后,我们将得到以下消息窗口,显示特定值已成功插入到ts_demo\表中。

PostgreSQL timestamp

创建并插入ts_demo 表的\值后,我们将使用SELECT命令返回ts_demo\表的所有行:

SELECT ts1, ts2  
FROM ts_demo;

输出

成功执行上述命令后,我们将得到以下输出,其中显示了ts_demo\表中的timestamp值:

PostgreSQL timestamp

之后,我们将再次将当前会话的时区修改为Asia/Calcutta,如以下命令所示。

SET TIMEZONE = 'Asia/Calcutta';

输出

执行上述命令后,我们将看到以下消息窗口,显示新时区已成功设置。

PostgreSQL timestamp

然后,我们将使用SELECT命令查看ts_demo\表中的现有数据:

SELECT ts1, ts2  
FROM ts_demo;

输出

成功执行上述命令后,我们将检索到以下结果:

PostgreSQL timestamp

我们可以看到,无论是输出值的中timestamp*列不修改,但在价值timestamptz列可以基于新的时区改变Asia/Calcutta”。

注意:通常,我们将使用 timestamptz 数据类型来存储timestamp数据值,因为它总是一个很好的练习。

PostgreSQL timestamp函数

我们有以下timestamp函数,例如NOW()、CURRENT_TIMESTAMP、CURRENT_TIME、TIMEOFDAY(),**使用 PostgreSQL 中可用的时间值上的 timezone(zone, timestamp)函数将时间值转换为不同的时区,这有助于我们增强我们使用timestamp数据类型时的性能**。

让我们看不同的例子来理解PostgreSQL timestamp函数是如何工作的。

获取当前时间

我们可以使用NOW()函数来检索当前timestamp

要返回数据库服务器的当前timestamp,我们可以使用以下命令:

SELECT NOW();

输出

执行上述命令后,我们将借助输出中的NOW() 函数获取当前timestamp,如下所示:

PostgreSQL timestamp

或者我们也可以使用CURRENT_TIMESTAMP函数来获取带时区的当前timestamp:

SELECT CURRENT_TIMESTAMP;

输出

执行上述命令后,我们将在输出中使用CURRENT_TIMESTAMP函数获取当前带时区的timestamp,如下所示:

PostgreSQL timestamp

我们可以使用CURRENT_TIME函数,它可以帮助我们在没有日期的情况下检索当前时间。

注意:CURRENT_TIMESTAMP 和 CURRENT_TIME 这两个函数都是用来返回当前时间和时区的。

在 PostgreSQL 中,我们还可以借助timeofday()函数以字符串格式检索一天中的时间,如下面的命令所示:

SELECT TIMEOFDAY();

输出

成功执行上述命令后,我们将在输出中使用TIMEOFDAY() 函数获取字符串格式的时间,如下所示:

PostgreSQL timestamp

时区之间的修改

我们可以使用timezone(zone, timestamp)函数将timestamp更改为另一个时区。

以下语法用于将时间更改为不同的时区:

SELECT timezone(zone, timestamp) ;

首先,我们将在以下命令的帮助下查看当前时区,如下所示:

SHOW TIMEZONE;

输出

执行上述命令后,我们将得到以下输出,显示当前时区是数据库服务器中的亚洲/加尔各答

PostgreSQL timestamp

让我们看一个示例以更好地理解。

现在,我们使用timezone()函数将当前时区修改为2020-10-06 00:00澳大利亚/悉尼时区,如以下命令所示:

SELECT timezone('Australia/Sydney','2020-10-06 02:14');

输出

执行上述命令后,我们将获得以下输出,该输出显示基于澳大利亚/悉尼时区的修改时间:

PostgreSQL timestamp

注意:如果我们将timestamp作为字符串提供给 timezone() 函数,PostgreSQL 会间接执行timestamp。

timestamp值直接转换为timestamptz数据类型,因为它始终是一种很好的方法,如下面的命令所示:

SELECT timezone('America/New_York','2016-06-01 00:00'::timestamptz);

输出

成功执行上述命令后,我们将得到以下输出,该输出显示的是时间戳记数据类型的转换时间,没有时间。

PostgreSQL timestamp

概述

PostgreSQL Timestamp 数据类型部分,我们学习了以下主题:

  • PostgreSQL的timestamp数据类型用于存储时间和日期的值用于指定列。
  • 我们使用了不同的TIMESTAMP 函数,例如NOW()、CURRENT_TIMESTAMP、CURRENT_TIME、TIMEOFDAY() 和 timezone(zone, timestamp)来增强和处理特定表中的 TIME 和 DATE 值。
  • 我们可以使用 timezone(zone, timestamp) 函数Timestamp 值更改为不同的时区