显示租赁开始日期在 2010 年 1 月 1 日至 2015 年 1 月 1 日之间(含)的所有租赁的租户姓名和房产地址

发布于 2025-01-10 13:20:57 字数 122 浏览 0 评论 0原文

选择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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

‘画卷フ 2025-01-17 13:20:57

使用 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';

使用 DD-MON-RR 的默认 NLS_DATE_FORMAT 会给出错误:

ORA-01861: literal does not match format string

db<>fiddle 这里

Use DATE literals:

SELECT LEASE_NO
FROM   LEASE
WHERE  STDATE  >= DATE '2010-01-01'
AND    ENDDATE <= DATE '2015-01-01';

or use TO_DATE with string literals and an explicit format model:

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');

Your code does not work as 2010-01-01 is parsed as the number 2010 and then subtract the number 01 (which simplifies to 1) and then subtract another number 01 (which, again, simplifies to 1) so your SQL statement is effectively:

SELECT LEASE_NO
FROM   LEASE
WHERE  STDATE >= 2008
AND    ENDDATE <= 2013;

You cannot compare a date to a number which is why you get the error:

ORA-00932: inconsistent datatypes: expected DATE got NUMBER

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:

SELECT LEASE_NO
FROM   LEASE
WHERE  STDATE >= '2010-01-01'
AND    ENDDATE <= '2015-01-01';

With the default NLS_DATE_FORMAT of DD-MON-RR, gives the error:

ORA-01861: literal does not match format string

db<>fiddle here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文