在本节中,无涯教程将了解 PostgreSQL时间戳数据类型的工作原理。还看到了 Timestamp数据类型的示例,并且还看到了一些可访问的时间戳函数,例如 NOW(),CURRENT_TIMESTAMP,CURRENT_TIME,TIMEOFDAY()和timezone(zone,timestamp),它可以帮助无涯教程更有效地处理时间值。
在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可以存储 TIME 和 DATE 值。但它不支持任何时区数据。这意味着当无涯教程转换数据库服务器的时区时,时间戳值将存储在数据库中,并且不能重复修改。
在PostgreSQL中,TIMESTAMP数据类型分为两种时间数据类型,它们分别是:
SELECT typname, typlen FROM pg_type WHERE typname ~ '^timestamp';
执行完上述命令后,无涯教程将获得以下输出,其中无涯教程可以看到 timestamp和timestamptz 数据类型都存储了 8个字节的时间戳值。
在PostgreSQL中, timestamptz 数据类型存储在 UTC值中:
PostgreSQL时间戳数据类型的语法如下:
TIMESTAMP;
或
TIMESTAMPTZ;
让无涯教程看一个示例示例,以了解 PostgreSQL时间戳和timestamptz数据类型的工作方式。
无涯教程正在创建一个名为 ts_demo 的新表,其中包含 timestamp 和 timestamptz 数据类型,并带有CREATE命令的帮助和使用INSERT命令插入值。
ts_demo 表包含两列,例如 ts1 TIMESTAMP 和 ts2 TIMESTAMPTZ 如以下命令所示:
CREATE TABLE ts_demo ( ts1 TIMESTAMP, ts2 TIMESTAMPTZ );
执行上述命令后,无涯教程将收到以下消息: ts_demo 表已成功创建。
成功创建 ts_demo 表后,无涯教程会将数据库服务器的时区设置为Australia/Darwin正如无涯教程在以下命令中看到的:
SET TIMEZONE ='Australia/Darwin';
执行完上述命令后,无涯教程将获得以下消息窗口,该窗口显示时区已成功设置。
链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-timestamp.html
来源:LearnFk无涯教程网
如果无涯教程希望看到当前时区,无涯教程可以使用以下命令,如下所示:
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;
成功执行上述命令后,无涯教程将检索以下结果:
无涯教程具有以下时间戳函数,例如 NOW(),CURRENT_TIMESTAMP,CURRENT_TIME,TIMEOFDAY(),使用时区(区域)将时间值转换为其他时区 ,这有助于无涯教程在使用 timestamp数据类型时提高性能。
无涯教程可以使用 now()函数来检索 current timestamp 。
要返回数据库服务器的当前时间戳,无涯教程可以使用以下命令:
SELECT NOW();
实施上述命令后,无涯教程将在输出中的 NOW()函数的帮助下获得当前时间戳,如下所示:
或者无涯教程可以使用 current_timestamp 函数,也可以使用时区获取当前时间戳:
SELECT CURRENT_TIMESTAMP;
实现上面的命令后,无涯教程将使用输出中的 current_timestamp函数在输出中获取 current timestamp ,如下所示:
而且无涯教程可以使用 CURRENT_TIME 函数,该函数可以帮助无涯教程检索没有日期的当前时间。
在PostgreSQL中,无涯教程还可以借助 timeofday()函数以字符串格式检索一天中的时间,如下面的命令:
SELECT TIMEOFDAY();
成功执行上述命令后,无涯教程将在输出中使用 TIMEOFDAY()函数以字符串格式获取一天中的时间,如下所示:
无涯教程可以使用 timezone(zone,timestamp)函数将时间戳更改为另一个时区。
以下语法用于将时间更改为其他时区:
SELECT timezone(zone, timestamp) ;
首先,借助以下命令,无涯教程将看到当前时区,如下所示:
SHOW TIMEZONE;
执行上述命令后,无涯教程将获得以下输出,该输出显示数据库服务器中的当前时区为 Asia/Calcutta :
让无涯教程看一个示例示例,以使无涯教程更好地理解。
现在,无涯教程使用 timezone()函数将当前时区修改为 2020-10-06 00:00 到Australia/ Sydney 时区,如以下命令所示:
SELECT timezone('Australia/Sydney','2020-10-06 02:14');
实现上述命令后,无涯教程将获得以下输出,该命令根据澳大利亚/悉尼时区显示修改后的时间:
直接将 timestamp 值转换为 timestamptz 数据类型,因为这总是一种极好的方法,如以下命令所示:
SELECT timezone('America/New_York','2016-06-01 00:00'::timestamptz);
成功执行上述命令后,无涯教程将获得以下输出,该命令以 timestamptz数据类型显示没有时间的转换时间。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)