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
-
必需的。需要转换的字符串。它可以是任何求值为
CHAR
、VARCHAR2
、NCHAR
或NVARCHAR2
数据类型的字符字符串表达式。 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
类型的值,它从给定的字符串参数转换而来。
如果任意一个参数为 NULL
, TO_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 参数
如果任意一个参数为 NULL
, TO_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
类型的值。