SQL 间隔与子查询
SQL interval with subqueries
我想过滤某个日期的旧记录,但此 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;
你可以这样写:
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;
这是一个演示:
要么使用
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
我想过滤某个日期的旧记录,但此 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;
你可以这样写:
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;
这是一个演示:
要么使用
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