我正在尝试:
SELECT CAST(COLUMN AS TIMESTAMP WITH TIME ZONE DEFAULT NULL ON CONVERSION ERROR) FROM TABLE;
有这样的错误:
ORA-00907: missing right parenthesis
我想念什么?
答案 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)
您的查询没有任何意义。
您的列数据类型为DATE
或TIMESTAMP
,只需使用
CAST(COLUMN AS TIMESTAMP WITH TIME ZONE)
请注意,转换将使用当前用户会话SESSIONTIMEZONE
,它将永远不会遇到转换错误。
或者您的列数据类型为VARCHAR2
或NUMBER
,然后提供格式说明符和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')