Skip to content

适用虚谷数据库版本

v12.10.8



适用虚谷数据库版本

v12.10.8


SYS_EXTRACT_UTC

📄字数 1.3K
👁️阅读量 加载中...

功能描述

SYS_EXTRACT_UTC 函数用于将时间表达式转换为对应的 UTC 时间(世界协调时间,时区为 +00:00)

  • 若输入参数包含明确的时区信息,函数直接基于该时区计算 UTC 时间;
  • 若输入参数不包含时区信息,函数会自动使用当前会话的时区 def_timezone 解析该时间,再转换为 UTC 时间。

语法格式

sql
SYS_EXTRACT_UTC(expr)

输入参数

  • expr1:DATETIME WITH TIME ZONE 类型。

    • 带时区:TIMESTAMP 'YYYY-MM-DD HH24:MI:SS +UTC' 或字符串 'YYYY-MM-DD HH24:MI:SS.FF TZR'
    • 不带时区:TIMESTAMP 'YYYY-MM-DD HH24:MI:SS' 或字符串 'YYYY-MM-DD HH24:MI:SS' ,此时依赖会话时区解析。

提示

  • 输入参数带字面量,如TIMESTAMP,在 XuGuDB 中是不带时区的,所以会自动使用当前会话时区来计算 UTC 时间,需要开启 ORALCE 模式,字面量才会带时区,用参数中的时区来计算 UTC 时间。
  • def_timezone 参数决定数据库内部系统时钟计算所使用的时区。该参数设置仅在数据库启动时生效,运行期间动态修改不会重新计算或维护系统时钟对应的时区偏移。

输出结果

  • 类型:DATETIME,返回输入时间对应的 UTC 时间,时区固定为 +00:00(UTC)。若输入为 NULL,输出结果为 NULL

执行类型

TYPEVALUE说明
NATIVE0函数只能在本地计算
VOLATI0函数的每次计算值不同
STABLE0函数的每次计算值相同
COMPUTE0函数支持预计算取值
NOT_CONST0函数不支持转常数
HAVE_DEF0函数参数有默认值

示例

sql
示例1:
-- 切换ORACLE模式
SQL> SET COMPATIBLE_MODE TO ORACLE;

-- 直接基于输入时区计算 UTC 时间:
SQL> SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -08:00') FROM dual;

+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| 2000-03-28 19:30:00.000 +00:00   |  
+----------------------------------+

示例2:
-- 输入为带时区的字符串:
SQL> SELECT SYS_EXTRACT_UTC('2000-03-28 11:30:00.00 -08:00') FROM dual;

+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| 2000-03-28 19:30:00.000 +00:00   |  
+----------------------------------+

示例3:
--切换虚谷模式
SQL> SET COMPATIBLE_MODE TO NONE;

-- 查看会话时区
SQL> show def_timezone;

+--------------+
| DEF_TIMEZONE |
+--------------+
| GMT+08:00    |
+--------------+

-- 输入不带时区的时间,在非oracle模式下,字面量timestamp是不带时区的,在这种情况下会报错。
SQL> SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00') FROM dual;

Error: [E10049 L1 C8] 字段变量或函数"SYS_EXTRACT_UTC"(CAST('2000-03-28 11:30:00.00' AS DATETIME(6)) )不存在

示例4:
-- 输入不带时区信息(不带字面量,会话时区为 `+08:00`)
SQL> SELECT SYS_EXTRACT_UTC('2000-03-28 11:30:00.00') FROM dual;
+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| 2000-03-28 03:30:00.000 +00:00   |  
+----------------------------------+