在oracle plsql中检查时区与时区变量的格式

时间:2015-05-12 08:40:22

标签: sql oracle datetime timestamp-with-timezone

我需要创建一个oracle plsql脚本,其输入param v_date为带时区的时间戳类型。 另外,我需要验证v_date的格式是否按照提到的格式'YYYY-MM-DD HH24:MI:SS TZH:TZM'。 我该怎么做到这一点?

我想通过将输入参数v_date更改为字符串来实现此目的,然后将此字符串转换为带时区的时间戳,如果在转换时发生任何错误,则结束格式错了。但似乎 TO_TIMESTAMP_TZ 函数不会在日期字符串格式不同时抛出错误w.r.t指定的格式而不是转换它。

例如

SELECT TO_TIMESTAMP_TZ('15-APR-15',
   'YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;

实际结果:14-APR-15 11.50.00.000000000 PM AMERICA/CHICAGO

预期结果:Some error as format is not as per 'YYYY-MM-DD HH:MI:SS TZH:TZM'

简而言之,我想知道如何验证带时区的时间戳类型的格式。

1 个答案:

答案 0 :(得分:1)

您可以尝试添加" fx"格式的修饰符,对Oracle说#34;期望这种格式":

SELECT TO_TIMESTAMP_TZ('15-APR-15 ', 'fxYYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;

SELECT TO_TIMESTAMP_TZ('15-APR-15 ', 'fxYYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL
                       *
Error at line 1
ORA-01862: the numeric value does not match the length of the format item