Oracle TO_TIMESTAMP_TZ() 函数使用指南

Oracle TO_TIMESTAMP_TZ() 是一个内置函数,它将给定的字符串参数转为一个 TIMESTAMP WITH TIME ZONE 类型的值。

Oracle TO_TIMESTAMP_TZ() 语法

这里是 Oracle TO_TIMESTAMP_TZ() 函数的语法:

TO_TIMESTAMP_TZ(str [ DEFAULT return_value ON CONVERSION ERROR ]
  [, fmt [, 'nlsparam' ] ])

参数

str

必需的。需要转换的字符串。它可以是任何求值为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串表达式。

DEFAULT return_value ON CONVERSION ERROR

可选的。它允许您指定在转换发生错误时返回的值。请注意, return_value 的数据类型与 str 参数相同,并且按照正确的格式给出。

fmt

可选的。它指示了 str 参数的格式。如果省略 fmt,则 str 必须采用 TIMESTAMP WITH TIME ZONE 数据类型的默认格式。

'nlsparam'

可选的。您可以使用这个 'NLS_DATE_LANGUAGE = language' 形式设置此参数,其中 language 是语言名称。

返回值

Oracle TO_TIMESTAMP_TZ() 函数返回一个 TIMESTAMP WITH TIME ZONE 类型的值,它从给定的字符串参数转换而来。

如果任意一个参数为 NULLTO_TIMESTAMP_TZ() 将返回 NULL

Oracle TO_TIMESTAMP_TZ() 示例

这里有几个展示了 Oracle TO_TIMESTAMP_TZ() 函数用法的示例。

基本用法

以下将字符串 '2023-02-14 10:11:12.123 +08:00' 转为带有时区的时间戳值:

ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF TZR';

SELECT
    TO_TIMESTAMP_TZ('2023-02-14 10:11:12.123 +08:00') Result
FROM dual;

输出:

RESULT
_______________________________________
2023-02-14 10:11:12.123000000 +08:00

默认格式由 NLS_TIMESTAMP_TZ_FORMAT 参数决定,您可以使用下面的语句修改 TIMESTAMP WITH TIME ZONE 类型的默认格式。

ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF TZR';

格式

Oracle TO_TIMESTAMP_TZ() 函数允许您指定一个字符串使用的格式。这个语句等效于上面的语句:

ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF TZR';
SELECT
    TO_TIMESTAMP_TZ(
        '2023-02-14 10:11:12.123 +08:00',
        'YYYY-MM-DD HH:MI:SS.FF TZH:TZM'
    ) Result
FROM dual;

输出:

RESULT
_______________________________________
2023-02-14 10:11:12.123000000 +08:00

下面是一个使用其他格式的示例:

SELECT
    TO_TIMESTAMP_TZ(
        '14-Feb-2012 10:11:12.123 +08:00',
        'DD-Mon-RRRR HH24:MI:SS.FF TZH:TZM'
    ) Result
FROM dual;

输出:

RESULT
_______________________________________
2012-02-14 10:11:12.123000000 +08:00

处理错误

Oracle TO_TIMESTAMP_TZ() 函数允许您指定一个当发生转换错误时使用的默认值。

ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF TZR';
SELECT
    TO_TIMESTAMP_TZ(
        '2025-02-14T10:11:12.123 +08:00'
        DEFAULT '2023-02-14 10:11:12.123 +08:00' ON CONVERSION ERROR
    ) Result
FROM dual;

输出:

RESULT
_______________________________________
2023-02-14 10:11:12.123000000 +08:00

在本示例中,因为 '2025-02-14T10:11:12.123 +08:00' 不符合默认的格式,因此发生了转换错误,最后,TO_TIMESTAMP_TZ() 返回了默认的值。

NULL 参数

如果任意一个参数为 NULLTO_TIMESTAMP_TZ() 将返回 NULL

SET NULL 'NULL';
SELECT
    TO_TIMESTAMP_TZ(NULL) ,
    TO_TIMESTAMP_TZ(NULL, NULL)
FROM dual;

输出:

TO_TIMESTAMP_TZ(NULL)    TO_TIMESTAMP_TZ(NULL,NULL)
________________________ _____________________________
NULL                     NULL

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle TO_TIMESTAMP_TZ() 是一个内置函数,它将给定的字符串参数转为一个 TIMESTAMP WITH TIME ZONE 类型的值。