PostgreSQL 时间戳
在本节中,我们将了解PostgreSQL时间戳数据类型的工作原理。我们还看到了Timestamp数据类型的示例,并且还看到了一些可访问的时间戳函数,例如
NOW(),CURRENT_TIMESTAMP,CURRENT_TIME,TIMEOFDAY()和timezone(zone,timestamp),这有助于我们更有效地处理时间值。
什么是PostgreSQL时间戳数据类型?
在PostgreSQL中,下一个数据类型是
TIMESTAMP ,它可以存储
TIME 和
DATE 值。但它不支持任何
时区数据。这意味着当我们转换数据库服务器的
时区时,
时间戳值将存储在数据库中,并且不能重复修改。
在PostgreSQL中,TIMESTAMP数据类型分为
两种时间数据类型,如下:
timestamp
timpstamptz
Timestamp: : 使用时间戳数据类型
,不带时区。
Timestamptz: : timestamptz数据类型用于带有时区的
。
注意:
timestamptz数据类型是与时区相关的日期和时间数据类型,并且是具有时区的时间戳。
时间戳和时间戳存储时间戳值的 8字节存储,如以下命令所示:
SELECT typname, typlen
FROM pg_type
WHERE typname ~ '^timestamp';
输出
执行完上述命令后,我们将获得以下输出,在其中我们可以看到
timestamp和timestamptz 数据类型都已存储
8字节时间戳值。
在PostgreSQL中,
timestamptz 数据类型存储在
UTC值中:
如果我们在timestamptz列中插入一个值,则PostgreSQL会将timestamptz值更改为 UTC值,并将UTC值存储在表中。
PostgreSQL将 UTC值改回由数据库服务器,当前数据库连接或用户(如果我们要求 timestamptz 时区 >来自数据库。
并且PostgreSQL不包含带有 timestamptz 的任何
时区数据
PostgreSQL时间戳数据类型的语法
PostgreSQL时间戳数据类型的语法如下:
OR
PostgreSQL TIMESTAMP数据类型的示例
让我们看一个示例示例,以了解
PostgreSQL时间戳和timestamptz数据类型的工作原理。
我们正在创建一个新表,作为
ts_demo ,其中包含
timestamp 和
timestamptz 数据类型, CREATE命令的帮助,并使用INSERT命令插入一些值。
要在
lidihuo数据库中创建
ts_demo 使用
CREATE 命令。
ts_demo 表包含两列,例如
ts1 TIMESTAMP 和
ts2
TIMESTAMPTZ ,如以下命令所示:
CREATE TABLE ts_demo (
ts1 TIMESTAMP,
ts2 TIMESTAMPTZ
);
输出
在执行上述命令时,我们将得到以下消息:
ts_demo 表具有已成功创建。
ts_demo 表创建成功,我们将数据库服务器的
时区设置为
Australia/Darwin ,如以下命令所示:
SET TIMEZONE ='Australia/Darwin';
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示时区已成功设置。
如果要查看
当前时区,可以使用以下命令,如下所示:
输出
执行上述命令后,我们将获得以下输出:
在将时区成功设置为
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'的新时区进行更改。
注意: 通常,我们将使用timestamptz数据类型来存储timestamp数据值,因为它总是一个很好的练习。
PostgreSQL时间戳函数
我们具有以下
时间戳函数,例如
NOW(),CURRENT_TIMESTAMP, CURRENT_TIME,TIMEOFDAY(),使用PostgreSQL中可用的时间值,使用时区(时区,时间戳)
功能,将时间值转换为其他时区帮助我们在使用timestamp数据类型时提高性能。
让我们看看不同的示例来了解
PostgreSQL时间戳功能的工作方式。
获取当前时间
我们可以使用
NOW()函数检索
当前时间戳。
要返回数据库服务器的当前时间戳,我们可以使用以下命令:
输出
执行上述命令后,我们将在
NOW()函数的帮助下获取当前时间戳 在输出中,如下所示:
或者我们可以使用
<还可以使用strong>
CURRENT_TIMESTAMP 功能来获取带有时区的当前时间戳:
还可以使用strong>
SELECT CURRENT_TIMESTAMP;
输出
执行上述命令后,我们将使用
CURRENT_TIMESTAMP函数获得带有时区的当前时间戳 ,如下所示:
我们可以使用
CURRENT_TIME 函数,该函数可帮助我们检索没有日期的当前时间。
注意: CURRENT_TIMESTAMP和CURRENT_TIME这两个函数都用于返回带有时区的当前时间。
在PostgreSQL中,我们还可以借助
timeofday( )检索
一天中的时间。 )功能,如以下命令所示:
输出
成功执行上述命令后,我们将使用
TIMEOFDAY()函数以字符串格式获取一天中的时间在输出中,如下所示:
时区之间的修改
我们可以使用
timezone(zone,timestamp)函数将时间戳更改为另一个时区。
以下语法用于将时间更改为不同时区:
SELECT timezone(zone, timestamp) ;
首先,我们将在以下命令的帮助下看到
当前时区wn在下面:
输出
执行上述命令后,我们将获得以下输出,其中显示
当前时区为
数据库服务器中的Asia/Calcutta :
让我们看一个示例示例为了更好地理解。
现在,我们使用
timezone()函数将
当前时区修改为
2020-10-06 00:00 到
澳大利亚/悉尼时区,如以下命令所示:
SELECT timezone('Australia/Sydney','2020-10-06 02:14');
输出
在执行上述命令时,我们将获得以下输出,该命令根据
澳大利亚/悉尼时区显示修改后的时间:
注意: 如果我们将时间戳记作为字符串提供给timezone()函数,则PostgreSQL将间接执行时间戳记。
直接将
timestamp 值转换为
timestamptz 数据类型,因为它总是一种非常好的方法,如以下命令所示:
SELECT timezone('America/New_York','2016-06-01 00:00'::timestamptz);
输出
成功执行上述命令后,我们将获得以下输出,该命令显示带有时间的转换时间,没有时间,并带有
timestamptz数据
概述
在
PostgreSQL时间戳数据类型部分,我们学习了以下主题:
PostgreSQL时间戳数据类型用于存储指定列的时间和日期值。
我们使用了不同的 TIMESTAMP函数,例如 NOW(),CURRENT_TIMESTAMP,CURRENT_TIME,TIMEOFDAY()和时区(时区,时间戳),以增强和处理特定表中的TIME和DATE值。
我们可以使用timezone(zone,timestamp)函数将 Timestamp值更改为不同的时区。