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。
执行类型
| TYPE | VALUE | 说明 |
|---|---|---|
| NATIVE | 0 | 函数只能在本地计算 |
| VOLATI | 0 | 函数的每次计算值不同 |
| STABLE | 0 | 函数的每次计算值相同 |
| COMPUTE | 0 | 函数支持预计算取值 |
| NOT_CONST | 0 | 函数不支持转常数 |
| HAVE_DEF | 0 | 函数参数有默认值 |
示例
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 |
+----------------------------------+