首页 > 解决方案 > 带有子查询的 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;

标签: sqloracledatetimesubqueryintervals

解决方案


要么使用

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

推荐阅读