SELECT LEASE_NO从租赁其中STDATE>=2010年1月1日AND ENDDATE<=2015-01-01;
告诉我这个错误ORA-00932:不一致的数据类型:预期日期得到编号
使用DATE
文字:
SELECT LEASE_NO
FROM LEASE
WHERE STDATE >= DATE '2010-01-01'
AND ENDDATE <= DATE '2015-01-01';
或者将TO_DATE
与字符串文字和显式格式模型一起使用:
SELECT LEASE_NO
FROM LEASE
WHERE STDATE >= TO_DATE('2010-01-01', 'YYYY-MM-DD')
AND ENDDATE <= TO_DATE('2015-01-01', 'YYYY-MM-DD');
您的代码不起作用,因为2010-01-01
被解析为数字2010
,然后减去数字01
(简化为1
(,然后减去另一个数字01
(再次简化为1
(,因此您的SQL语句有效地为:
SELECT LEASE_NO
FROM LEASE
WHERE STDATE >= 2008
AND ENDDATE <= 2013;
你无法将日期与数字进行比较,这就是你出现错误的原因:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER
注:
不要只是";在日期值周围加上单引号"因为这会将它们更改为字符串而不是日期,然后您将依赖于依赖于NLS_DATE_FORMAT
会话参数的隐式字符串到日期转换,并且您可能(使用默认NLS设置(会收到错误。
例如:
SELECT LEASE_NO
FROM LEASE
WHERE STDATE >= '2010-01-01'
AND ENDDATE <= '2015-01-01';
默认NLS_DATE_FORMAT
为DD-MON-RR
,给出错误:
ORA-01861: literal does not match format string
db<gt;小提琴这里