Oracle 不等式比较 - 无效数字
Oracle inequality comparison - invalid number
我正在尝试使用以下代码在我的系统中创建警报。我试过稍微改变它,但收到错误或没有返回数据。
在我的 select 语句中,我已经计算出日期数据与 sysdate 的天数差异。在我的 where 子句中,我试图通过使用小于或等于运算符来限制通过的数据。
SELECT A.COL_NAME AS "END OF SERVICE", B.DUSER AS "DATE",(TRUNC(B.DUSER) - TRUNC(SYSDATE))AS "DAYS LEFT"
FROM UD_COLS A LEFT OUTER JOIN UD_DATA B
ON A.ID = B.UD_COLS_ID
WHERE A.ID = 52 AND
('DAYS LEFT' <= 30)
这导致错误:ORA-01722:无效数字
我尝试更改 select 以添加 TO_NUMBER(TRUNC(B.DUSER) - TRUNC(SYSDATE)) 并且仍然收到相同的错误。
我也试过更改为 ('DAYS LEFT' <= '30') 我没有收到任何错误,但数据没有按预期返回。
如果没有 ('DAYS LEFT' <= 30),我会在 "DAYS LEFT" 列中看到值 1。这不是数值吗?
如果我使用 >= 运算符,无论值如何,数据都会填充。
提前致谢。
William Robertson 在对您的问题的评论中解释了您的代码有什么问题(有两件事,一件可以更正 - 将单引号更改为双引号 - 另一件无法修复 - 你无法参考在 where
子句中在同一查询的 select
子句中定义的别名。
最简单的修复方法是将 where
子句更改为
where b.duser < trunc(sysdate) + 31
这等同于您使用 trunc(b.duser)
的条件,但它的编写方式没有对 b.duser
应用任何函数调用 - 导致执行速度更快,如果执行速度更快,则执行速度更快您在该列上有一个索引。
我正在尝试使用以下代码在我的系统中创建警报。我试过稍微改变它,但收到错误或没有返回数据。
在我的 select 语句中,我已经计算出日期数据与 sysdate 的天数差异。在我的 where 子句中,我试图通过使用小于或等于运算符来限制通过的数据。
SELECT A.COL_NAME AS "END OF SERVICE", B.DUSER AS "DATE",(TRUNC(B.DUSER) - TRUNC(SYSDATE))AS "DAYS LEFT"
FROM UD_COLS A LEFT OUTER JOIN UD_DATA B
ON A.ID = B.UD_COLS_ID
WHERE A.ID = 52 AND
('DAYS LEFT' <= 30)
这导致错误:ORA-01722:无效数字 我尝试更改 select 以添加 TO_NUMBER(TRUNC(B.DUSER) - TRUNC(SYSDATE)) 并且仍然收到相同的错误。
我也试过更改为 ('DAYS LEFT' <= '30') 我没有收到任何错误,但数据没有按预期返回。
如果没有 ('DAYS LEFT' <= 30),我会在 "DAYS LEFT" 列中看到值 1。这不是数值吗?
如果我使用 >= 运算符,无论值如何,数据都会填充。
提前致谢。
William Robertson 在对您的问题的评论中解释了您的代码有什么问题(有两件事,一件可以更正 - 将单引号更改为双引号 - 另一件无法修复 - 你无法参考在 where
子句中在同一查询的 select
子句中定义的别名。
最简单的修复方法是将 where
子句更改为
where b.duser < trunc(sysdate) + 31
这等同于您使用 trunc(b.duser)
的条件,但它的编写方式没有对 b.duser
应用任何函数调用 - 导致执行速度更快,如果执行速度更快,则执行速度更快您在该列上有一个索引。