【发布时间】:2018-08-25 17:04:10
【问题描述】:
我对数据库具有读取权限。我想检查与多个表关联的许多(日期)列,以查看其中任何列的值是否超出指定范围。
例如,我可能有 TBL1.from_date、TBL2.from_date、TBL2.to_date、TBL3.birthdate 都采用相同的日期格式。我想检查所有列以查看它们是否介于 1990 年至 2025 年之间,而无需对每列的日期范围进行硬编码。我知道我可以将 IN 子句用于单个值,但不知道如何专门使用它进行比较。
当前 SQL 查询:
select TBL_A.acct_no
from TBL_A, TBL1, TBL2, TBL3
where TBL_A.acct_no = TBL1.acct_no and
TBL1.acct_no = TBL2.acct_no and
TBL2.acct_no = TBL3.acct_no and
(
TBL1.from_date < '01-JAN-1990' or
TBL1.from_date > '01-JAN-2025' or
TBL2.from_date < '01-JAN-1990' or
TBL2.from_date > '01-JAN-2025' or
TBL2.to_date < '01-JAN-1990' or
TBL2.to_date > '01-JAN-2025' or
TBL3.birthdate < '01-JAN-1990' or
TBL3.birthdate > '01-JAN-2025' or
);
我想要实现的示例 SQL 查询:
select TBL_A.acct_no
from TBL_A, TBL1, TBL2, TBL3
where TBL_A.acct_no = TBL1.acct_no and
TBL1.acct_no = TBL2.acct_no and
TBL2.acct_no = TBL3.acct_no and
-- psudo-code
(date range) not in (TBL1.from_date, TBL2.from_date, TBL2.to_date, TBL3.birthdate);
【问题讨论】:
-
您确定条件会检查它们是在 1990 - 2025 之间还是在 1990 - 2025 之外?
-
外部 - 我更新了我的帖子。谢谢!
-
这些列中是否允许或存在
NULL值?如果没有,那么@smrtskpr 的答案可能对你有用。
标签: sql oracle date plsql date-range