过滤掉基于数据的有效数据和期限数据
Posted
技术标签:
【中文标题】过滤掉基于数据的有效数据和期限数据【英文标题】:Filtering out data based effective and Term Data 【发布时间】:2020-05-29 10:54:38 【问题描述】:我的查询包含开始日期和结束日期,我想根据两个日期过滤掉数据。如果您可以查看示例,我只需要基于开始或结束日期的 2019 年及更高的数据。我需要 ID 1,2,3,6,7,不需要 4,5。我们可以根据开始日期和结束日期的提取年份来做。但正在寻找更好的方法谢谢!
CREATE TABLE TEMP
(
ID INT,
SDate DATE,
EDate DATE
)
INSERT INTO TEMP
SELECT 1,'01/01/2014', '01/01/2019' FROM DUAL
UNION ALL
SELECT 2,'01/01/2015', '01/01/2020' FROM DUAL
UNION ALL
SELECT 3,'01/01/2019', '12/31/2019' FROM DUAL
UNION ALL
SELECT 4,'01/01/2012', '12/31/2018' FROM DUAL
UNION ALL
SELECT 5,'01/01/2010', '10/01/2016' FROM DUAL
UNION ALL
SELECT 6,'06/01/2020', '10/01/2020' FROM DUAL
UNION ALL
SELECT 7,'01/01/2021', '03/01/2021' FROM DUAL
【问题讨论】:
【参考方案1】:这样的? 听起来就像你说的,但是 - 你现在没有发布你是怎么做的。如果那不是“它”,您需要什么“更好”的方法,为什么?我的意思是,这有什么问题?
SQL> select *
2 from temp
3 where extract(year from sdate) >= 2019
4 or extract(year from edate) >= 2019;
ID SDATE EDATE
---------- ---------- ----------
1 01/01/2014 01/01/2019
2 01/01/2015 01/01/2020
3 01/01/2019 12/31/2019
6 06/01/2020 10/01/2020
7 01/01/2021 03/01/2021
SQL>
【讨论】:
是的,很抱歉!我又错过了一个条目,'6, '10/01/2020','12/31/2020' 没关系;这两个日期都在 2020 年,不适合。 是的!我也需要适应它 好的,没问题。我也编辑了答案。请看一下。【参考方案2】:您可以简单地使用edate
上的条件,如下所示:
select * from emp
where edate >= date '2019-01-01';
这将使用edate
上的索引,如果有的话。
【讨论】:
以上是关于过滤掉基于数据的有效数据和期限数据的主要内容,如果未能解决你的问题,请参考以下文章