显示租赁开始日期在 2010 年 1 月 1 日至 2015 年 1 月 1 日之间(含)的所有租赁的租户姓名和房产地址
选择LEASE_NO 来自租赁 其中状态 >= 2010-01-01 且结束日期 <= 2015-01-01;
给我这个错误 ORA-00932: 数据类型不一致: 预期的 DATE 得到了 NUMBER
SELECT LEASE_NO
FROM LEASE
WHERE STDATE >= 2010-01-01
AND ENDDATE <= 2015-01-01;
GAVE ME THIS ERROR ORA-00932: inconsistent datatypes: expected DATE got NUMBER
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
DATE
文字:或将
TO_DATE
与字符串文字和显式格式模型一起使用:您的代码在解析
2010-01-01
时不起作用作为数字2010
,然后减去数字01
(简化为1
),然后减去另一个数字01
(哪个,再次简化为1
),因此您的 SQL 语句是有效的:您无法将日期与数字进行比较,这就是您收到错误的原因:
注意:
不要只是“在日期值周围放置单引号。 ”因为这会将它们更改为字符串而不是日期,然后您将依赖于隐式字符串到日期的转换,该转换将取决于
NLS_DATE_FORMAT
会话参数,并且您可能(使用 默认 NLS 设置)会出现错误。例如:
使用
DD-MON-RR
的默认NLS_DATE_FORMAT
会给出错误:db<>fiddle 这里
Use
DATE
literals:or use
TO_DATE
with string literals and an explicit format model:Your code does not work as
2010-01-01
is parsed as the number2010
and then subtract the number01
(which simplifies to1
) and then subtract another number01
(which, again, simplifies to1
) so your SQL statement is effectively:You cannot compare a date to a number which is why you get the error:
Note:
Do not just "Put single quotes round your date values." as this would change them to strings and not to dates and then you would be relying on an implicit string-to-date conversion that will depend on the
NLS_DATE_FORMAT
session parameter and you are likely (with the default NLS settings) to get an error.For example:
With the default
NLS_DATE_FORMAT
ofDD-MON-RR
, gives the error:db<>fiddle here