如何按当前日期之后的日期过滤?

Posted

技术标签:

【中文标题】如何按当前日期之后的日期过滤?【英文标题】:how to filter by dates after the current date? 【发布时间】:2019-05-21 11:19:25 【问题描述】:

我想按当前日期之后的日期过滤到期日期。问题是当前数据的日期分三列; exp0yearexp0moexp0da

我尝试放置多个 where 子句,exp0mo > 4 的问题使日期不符合 1/1/2020

Select exp0yr,exp0mo,exp0da,policy0num,zip0post,add0line01,add0line03,add0line04,profit0ctr
from ni.pmsp0200
where exp0yr>118  and exp0mo>04 and exp0da>20 and profit0ctr='eoh'
group by exp0yr,exp0mo,exp0da,policy0num,zip0post,add0line01,add0line03,add0line04,profit0ctr

我希望得到05/21/2019 之后的日期,但我得到了除01/01/2020-05/20/2020 之外的所有日期。

【问题讨论】:

这个答案应该可以帮助你***.com/questions/35576983/… How to create a Date in SQL Server given the Day, Month and Year as Integers的可能重复 我建议使用计算列来计算实际日期。如果你创建列PERSISTED,你甚至可以索引它。如果您从逻辑上考虑,为什么会期望 2020 年 1 月至 4 月出现? 1、2、3 和 4 都小于或等于 4,并且您需要月份值大于 4 的行。 【参考方案1】:

如果你使用 sql server 2012+ 可以获取当前数据日期as follow

datefromparts(exp0yr, exp0mo, exp0da)

否则使用这样的东西:

 SELECT CAST(CONCAT(CAST(@exp0yr AS VARCHAR(4)), '-',CAST(exp0mo AS VARCHAR(2)), '-',CAST(exp0daAS VARCHAR(2))) AS DATE)

你的脚本变成了这样

declare @mydate as date
set @mydate='2019/05/21' --Put your target date here
    Select exp0yr,exp0mo,exp0da,policy0num,zip0post,add0line01,add0line03,add0line04,profit0ctr
    from ni.pmsp0200
    where datefromparts(exp0yr, exp0mo, exp0da)>@mydate and profit0ctr='eoh'
    group by exp0yr,exp0mo,exp0da,policy0num,zip0post,add0line01,add0line03,add0line04,profit0ctr

【讨论】:

【参考方案2】:

试试这个

--Temp table 
CREATE TABLE #Test
(cYear  VARCHAR(4) NOT NULL, 
 cMonth VARCHAR(2) NOT NULL , 
 cDay   VARCHAR(2) NOT NULL 
);
--Sample data
INSERT INTO #Test
       SELECT '2019', 
              '04', 
              '01'
       UNION ALL
       SELECT '2018', 
              '06', 
              '01';
--Calculated column - you can define prefix, such as leading zeros
ALTER TABLE #TEST
ADD calcDate AS CYEAR + CMONTH +  CDAY PERSISTED


--Shows only one record
SELECT *
FROM #Test
WHERE calcDate BETWEEN '20190101' AND '20191231';

【讨论】:

以上是关于如何按当前日期之后的日期过滤?的主要内容,如果未能解决你的问题,请参考以下文章

如何按日期过滤列

如何使用Java Streams API正确过滤开始日期和结束日期之间的日期?

如何在codeigniter的当前日期插入天间隔?

如何禁用当前日期之后的日期?

如何在 Realm swift 中过滤为当前日期创建的事件?

Mysql 查询获取日期时间紧跟当前日期时间之后的记录