我有一个关于Oracle DATE和INTERVAL数据类型的内部工作方式的问题。根据Oracle 11.2 SQL Reference,减去2个DATE数据类型,结果将是NUMBER数据类型。
在粗略的测试中,这似乎是真的:
CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;
将返回NUMBER数据类型。
但现在如果你这样做了:
SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
您将获得一个INTERVAL数据类型。换句话说,Oracle可以将DATE减法中的数字转换为INTERVAL类型。
所以现在我想我可以尝试在括号中直接放入一个NUMBER数据类型(而不是做'SYSDATE - start_date‘,这无论如何都会导致一个数字):
SELECT (1242.12423) DAY(5) TO SECOND from test;
但这会导致错误:
ORA-30083: syntax error was found in interval value expression
所以我的问题是:这里发生了什么?减去日期似乎应该得到一个数字(如SELECT语句#1所示),该数字不能自动转换为INTERVAL类型(如SELECT语句#3所示)。但是,如果您使用日期减法表达式而不是输入一个原始数字(SELECT语句#2),Oracle似乎能够以某种方式做到这一点。
谢谢
https://stackoverflow.com/questions/9322935
复制相似问题