如何解决带子查询的SQL间隔
我要过滤器记录某个日期的旧记录,并且此SQL无法正常工作:
SELECT *
FROM TABLE1
WHERE UPDATED_ON + INTERVAL (SELECT B.DAYS FROM B.TABLE2
WHERE B.NAME = 'Tmp') DAY < SYSDATE;
但是此SQL之所以有效,是因为“”中的常数为2。我该如何使用子查询代替常量?
SELECT *
FROM TABLE1
WHERE UPDATED_ON + INTERVAL '2' DAY < SYSDATE;
解决方法
可以使用
WHERE
UPDATED_ON
+ (SELECT B.DAYS FROM B.TABLE2 WHERE B.NAME = 'Tmp') * INTERVAL '1' DAY < SYSTIMESTAMP
或
WHERE
UPDATED_ON
+ NUMTODSINTERVAL((SELECT B.DAYS FROM B.TABLE2 WHERE B.NAME = 'Tmp'),'day') < SYSTIMESTAMP
或
WHERE
UPDATED_ON
+ (SELECT B.DAYS FROM B.TABLE2 WHERE B.NAME = 'Tmp') < SYSDATE
,
您可以这样写:
select t1.*
from table1 t1
where updated_on < (
select systimestamp - t2.days * interval '1' day from table2 t2 where t2.name = 'Tmp'
)
或者,如果updated_on
是date
而不是timestamp
:
select t1.*
from table1 t1
where updated_on < (
select sysdate - t2.days from table2 t2 where t2.name = 'Tmp'
)
请注意,如果table2
中name
为'Tmp'
的行超过一个,则此操作将失败。
您可以这样尝试:
select UPDATED_ON,UPDATED_ON + (SELECT t2.DAYS FROM TABLE2 t2 WHERE t2.NAME = 'Tmp')
FROM TABLE1
WHERE UPDATED_ON + (SELECT t2.DAYS FROM TABLE2 t2 WHERE t2.NAME = 'Tmp') < SYSDATE;
这是一个演示:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。