转换错误时Oracle默认为null-时间戳

时间:2019-10-29 08:59:21

标签: sql oracle

我正在尝试:

SELECT CAST(COLUMN AS TIMESTAMP WITH TIME ZONE DEFAULT NULL ON CONVERSION ERROR) FROM TABLE;

有这样的错误:

ORA-00907: missing right parenthesis

我想念什么?

2 个答案:

答案 0 :(得分:0)

您的查询在Oracle 18c上运行:

true|false

输出:

| TS                                  |
| :---------------------------------- |
| 29-OCT-19 10.12.11.106219000 +00:00 |
| null                                |
| null                                |

db <>提琴here

CREATE TABLE table_name ( column_name VARCHAR2(40) ); INSERT INTO table_name ( column_name ) SELECT TO_CHAR( SYSTIMESTAMP ) FROM DUAL UNION ALL SELECT 'abcde' FROM DUAL UNION ALL SELECT NULL FROM DUAL; SELECT CAST( column_name AS TIMESTAMP WITH TIME ZONE DEFAULT NULL ON CONVERSION ERROR ) AS ts FROM table_name; 函数从Oracle 12.2开始支持CAST()语法;该语法不会出现在Oracle 12.1 documentation中。因此,您需要确保使用的是受支持的版本。

答案 1 :(得分:0)

您的查询没有任何意义。

您的列数据类型为DATETIMESTAMP,只需使用

CAST(COLUMN AS TIMESTAMP WITH TIME ZONE) 

请注意,转换将使用当前用户会话SESSIONTIMEZONE,它将永远不会遇到转换错误。

或者您的列数据类型为VARCHAR2NUMBER,然后提供格式说明符和NLS_DATE_LANGUAGE(如果适用)。

CAST(COLUMN AS TIMESTAMP WITH TIME ZONE DEFAULT NULL ON CONVERSION ERROR,
   'YYYY-Mon-DD HH24:MI:SS TZH:TZM',
   'NLS_DATE_LANGUAGE = American')
相关问题