PostgreSQL - Timestamp类型

PostgreSQL - Timestamp类型 首页 / PostgreSQL入门教程 / PostgreSQL - Timestamp类型

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

时间戳类型

在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可以存储 TIME DATE 值。但它不支持任何时区数据。这意味着当无涯教程转换数据库服务器的时区时,时间戳值将存储在数据库中,并且不能重复修改。

在PostgreSQL中,TIMESTAMP数据类型分为两种时间数据类型,它们分别是:

  • timpstamp        -  使用时间戳数据类型,不带时区
  • timpstamptz    - 带有时区的strongstamptz数据类型
存储时间戳值的8个字节存储,如下面的命令所示:
SELECT typname, typlen
FROM pg_type
WHERE typname ~ '^timestamp'; 

执行完上述命令后,无涯教程将获得以下输出,其中无涯教程可以看到 timestamp和timestamptz 数据类型都存储了 8个字节的时间戳值。

PostgreSQL Timestamp

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

  • 如果无涯教程在timestamptz列中插入一个值,则PostgreSQL会将timestamptz值更改为 UTC值,并将UTC值存储在表中。
  • PostgreSQL将 UTC值改回由数据库服务器,当前数据库连接或用户(如果无涯教程请求 timestamptz 时区 来自数据库。
  • 并且PostgreSQL不包含带有 timestamptz 的任何时区数据

时间戳类型语法

PostgreSQL时间戳数据类型的语法如下:

TIMESTAMP; 

TIMESTAMPTZ;

TIMESTAMP类型示例

让无涯教程看一个示例示例,以了解 PostgreSQL时间戳和timestamptz数据类型的工作方式。

无涯教程正在创建一个名为 ts_demo 的新表,其中包含 timestamp timestamptz 数据类型,并带有CREATE命令的帮助和使用INSERT命令插入值。

ts_demo 表包含两列,例如 ts1 TIMESTAMP ts2 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

成功将时区设置为 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 表中。

PostgreSQL Timestamp

创建和插入 ts_demo表的 值后,无涯教程将使用 select 命令返回 ts_demo 表:

SELECT ts1, ts2
FROM ts_demo;

成功执行上述命令后,无涯教程将获得以下输出,该输出显示 ts_demo 表中存在的时间戳值:

PostgreSQL Timestamp

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

SET TIMEZONE = 'Asia/Calcutta';

在实现上面的命令时,无涯教程将获取以下消息窗口,该窗口显示已成功设置新的时区。

PostgreSQL Timestamp

然后,无涯教程将使用 SELECT 命令在 ts_demo 表中查看现有数据:

SELECT ts1, ts2
FROM ts_demo;

成功执行上述命令后,无涯教程将检索以下结果:

PostgreSQL Timestamp

时间戳函数

无涯教程具有以下时间戳函数,例如 NOW(),CURRENT_TIMESTAMP,CURRENT_TIME,TIMEOFDAY(),使用时区(区域)将时间值转换为其他时区 ,这有助于无涯教程在使用 timestamp数据类型时提高性能。

无涯教程可以使用 now()函数来检索 current timestamp 。

要返回数据库服务器的当前时间戳,无涯教程可以使用以下命令:

SELECT NOW();

实施上述命令后,无涯教程将在输出中的 NOW()函数的帮助下获得当前时间戳,如下所示:

PostgreSQL Timestamp

或者无涯教程可以使用 current_timestamp 函数,也可以使用时区获取当前时间戳:

SELECT CURRENT_TIMESTAMP;

实现上面的命令后,无涯教程将使用输出中的 current_timestamp函数在输出中获取 current timestamp ,如下所示:

PostgreSQL Timestamp

而且无涯教程可以使用 CURRENT_TIME 函数,该函数可以帮助无涯教程检索没有日期的当前时间。

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

SELECT TIMEOFDAY();

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

PostgreSQL Timestamp

时区之间的修改

无涯教程可以使用 timezone(zone,timestamp)函数将时间戳更改为另一个时区。

以下语法用于将时间更改为其他时区:

SELECT timezone(zone, timestamp) ;

首先,借助以下命令,无涯教程将看到当前时区,如下所示:

SHOW TIMEZONE;

执行上述命令后,无涯教程将获得以下输出,该输出显示数据库服务器中的当前时区 Asia/Calcutta :

PostgreSQL Timestamp

让无涯教程看一个示例示例,以使无涯教程更好地理解。

现在,无涯教程使用 timezone()函数将当前时区修改为 2020-10-06 00:00 Australia/ Sydney 时区,如以下命令所示:

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

实现上述命令后,无涯教程将获得以下输出,该命令根据澳大利亚/悉尼时区显示修改后的时间:

PostgreSQL Timestamp

直接将 timestamp 值转换为 timestamptz 数据类型,因为这总是一种极好的方法,如以下命令所示:

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

成功执行上述命令后,无涯教程将获得以下输出,该命令以 timestamptz数据类型显示没有时间的转换时间。

PostgreSQL Timestamp

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

React实战进阶45讲 -〔王沛〕

深入拆解Tomcat & Jetty -〔李号双〕

DevOps实战笔记 -〔石雪峰〕

分布式协议与算法实战 -〔韩健〕

Linux内核技术实战课 -〔邵亚方〕

手把手带你写一个Web框架 -〔叶剑峰〕

超级访谈:对话汤峥嵘 -〔汤峥嵘〕

超级访谈:对话毕玄 -〔毕玄〕

结构写作力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)