原文链接:https://www.gbase.cn/community/post/5509
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在 GBase 8s 数据库中,TIMESTAMP WITH TIME ZONE 用于存储日期和时间信息以及时区信息的数据类型。本文将详细解析这一数据类型的特点、应用及其在GBase 8s中的实现方式。
语法
参数说明:
元素 | 描述 | 限制 | 语法 |
fractional_seconds_precision | 可选项,秒的小数部分 | 取值范围是0-5,默认5。 | 数值 |
时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与+14:00 之间。
TIMESTAMP_WITH_TIME_ZONE 数据类型存储年、月、日、小时、分钟、秒和时区信息。与其他简单的日期时间类型相比,它不仅能精确到秒以下的小数部分(最多可达 5 位小数),还能记录时间对应的时区偏移量。例如,2025-01-20 12:30:00.12343 +08:00 此时间的表示,既包含了精确的时间点,又说明了该时间处于东八区。
参数说明:
元素 | 描述 | 限制 | 语法 |
hh | 与utc时间的偏移小时 | 有效范围是-12到+14 | 数值 |
mi | 与utc时间的偏移分钟 | 有效范围是00到59 | 数值 |
该功能仅在 GBase 8s 的 ORACLE 模式下支持。
设置时区
默认操作系统时区
默认情况下,数据库会获取服务器上的当前时区。可通过 timedatectl 命令查看。如下所示:
测试所有的服务器的时区为 Time zone: Asia/Shanghai (CST, +0800)
[root@sysbench201 ~]# timedatectl Local time: Mon 2025-01-20 14:05:58 CST Universal time: Mon 2025-01-20 06:05:58 UTC RTC time: Mon 2025-01-20 06:05:59 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
复制
要更改系统的时区,可以使用 timedatectl set-timezone 命令,后跟所需的时区信息。例如,要将时区设置为上海,可以执行以下命令:
timedatectl set-timezone "Asia/Shanghai"
复制
通过环境变量 GL_TIME_ZONE 设置
可通过设置 GL_TIME_ZONE 环境变量,指定数据库的初始化时区。export GL_TIME_ZONE='+4:00'。
当系统环境变量GL_TIME_ZONE也没有时,默认是当前操作系统的时区。
ALTER SESSION SET TIME_ZONE
可通过 alter session set time_zone 语句修改当前会话的时区。
> alter session set time_zone='-09:21'; Environment set. Elapsed time: 0.001 sec
复制
设置时区类型数据的输出输入格式
可通过alter session set nls_timestamp_tz_format 语句设置时区类型的输出格式。NLS_TIMESTAMP_TZ_FORMAT默认为” yyyy-mm-dd hh24:mi:ss.ff tzh:tzm ”。
例:
> alter session set nls_timestamp_tz_format='yyyy-mm-dd hh24/mi/ss.ff tzh/tzm'; Environment set. > select timestamp '2023-12-21 12:44:11 +8:10' from dual; (CONSTANT) 2023-12-21 12/44/11.00000 +08/10 1 row(s) retrieved.
复制
TIMESTAMP WITH TIME ZONE 类型示例
示例数据库版本为:GBase8sV8.8_3.6.1
示例1:TIMESTAMP WITH TIME ZONE 类型默认毫秒精度为 5
set environment sqlmode 'oracle'; create table t1(id int,c1 TIMESTAMP WITH TIME ZONE); --插入数据 insert into t1 values(1,'2023-02-10 23:25:33.1234 +08:00'); insert into t1 values(2, timestamp '2023-02-10 23:25:33 +08:00'); insert into t1 values(3, timestamp '2011-01-01 10:00:00'); insert into t1 values(4,'2025-01-01 09:22:33.002 -05:00'); --查询 > select * from t1; ID C1 1 2023-02-10 23:25:33.12340 +08:00 2 2023-02-10 23:25:33.00000 +08:00 3 2011-01-01 10:00:00.00000 +08:00 4 2025-01-01 09:22:33.00200 -05:00 4 row(s) retrieved.
复制
示例2:设置时区类型数据的输出输入格式
> alter session set nls_timestamp_tz_format='yyyy-mm-dd hh24:mi:ss.ff3 tzh:tzm'; Environment set. create table t2(id int,c1 TIMESTAMP(3) WITH TIME ZONE); insert into t2 values(1, '2023-02-10 23:25:33.124 +08:00'); insert into t2 values(2, '2023-02-10 23:25:33 +10:22'); > select * from t2 order by id; ID 1 C1 2023-02-10 23:25:33.123 +08:00 ID 1 C1 2023-02-10 23:25:33.124 +08:00 2 row(s) retrieved.
复制
示例3:修改当前会话时区
> alter session set time_zone='-09:21'; Environment set. > insert into t2 values(10,timestamp '2025-01-02 09:00:02.100'); 1 row(s) inserted. > select * from t2; ID 1 C1 2023-02-10 23:25:33.123 +08:00 ID 1 C1 2023-02-10 23:25:33.124 +08:00 ID 10 C1 2025-01-02 09:00:02.100 -09:21 ---新增数据的默认时区值已变为 -09:21 3 row(s) retrieved.
复制
示例4:通过设置GL_TIME_ZONE环境变量来修改时区
[root@sysbench201 gbases361]# export GL_TIME_ZONE='+4:00' [root@sysbench201 gbases361]# dbaccess test - Your evaluation license will expire on 2026-01-17 00:00:00 Database selected. > set environment sqlmode 'oracle'; Environment set. > select * from t2; ID C1 1 2023-02-10 23:25:33.123 +08:00 1 2023-02-10 23:25:33.124 +08:00 10 2025-01-02 09:00:02.100 -09:21 3 row(s) retrieved. > insert into t2 values(11,current_timestamp); 1 row(s) inserted. > select * from t2; ID C1 1 2023-02-10 23:25:33.123 +08:00 1 2023-02-10 23:25:33.124 +08:00 10 2025-01-02 09:00:02.100 -09:21 11 2025-01-20 14:47:54.715 +04:00 --新插入的数据的时区为 +04:00 4 row(s) retrieved.
复制
TIMESTAMP_WITH_TIME_ZONE数据类型是GBase 8s数据库处理跨时区数据的工具。它不仅提供了精确的时间记录能力,还通过灵活的时区设置方法,使得数据库能够适应全球化的业务需求。无论是金融、物流还是在线服务,GBase 8s都能提供稳定可靠的时区处理能力。通过本文的介绍,相信读者对GBase 8s中的TIMESTAMP_WITH_TIME_ZONE数据类型有了更深入的了解。在实际应用中,合理利用这一数据类型,可以大大提高数据处理的准确性和效率。
原文链接:https://www.gbase.cn/community/post/5509
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。