需要为Date逻辑编写查询

ram*_*amu 2 sql sql-server sql-server-2008

我有一个下面的查询,其中有一个日期过滤器EST_PICK_DATE between '2015-02-01' and '2015-06-01',其中逻辑EST_PICK_DATE应该是从当月和下个月的第一个日期起3个月.当前月份的IE EST_PICK_DATE应该在'2015-02-01'和之间'2015-06-01'.
我需要动态地写下面的查询.
在下面的查询我已硬编码值'2015-02-01''2015-06-01',但它应该动态地取得.
怎么做到这一点?我在SSIS包中使用此查询,那么我应该在SQL级别执行还是应该在包中实现此逻辑?如果是,怎么样?

INSERT INTO STG_Open_Orders (Div_Code, net_price, gross_price)
SELECT ord.DIV_CODE AS Div_Code, ord_l.NET_PRICE AS net_price, ord_l.gross_price AS gross_price, 
FROM ORD ord inner join ORD_L ord_l ONord.ORD_ID=ord_l.ORD_ID
WHERE ord_l.EST_PICK_DATE BETWEEN '2015-02-01' AND'2015-06-01'
Run Code Online (Sandbox Code Playgroud)

Pra*_*ukh 5

试试这个

INSERT INTO STG_Open_Orders (Div_Code, net_price, gross_price)
SELECT ord.DIV_CODE AS Div_Code, ord_l.NET_PRICE AS net_price, ord_l.gross_price AS gross_price, 
FROM ORD ord inner join ORD_L ord_l ONord.ORD_ID=ord_l.ORD_ID
WHERE ord_l.EST_PICK_DATE BETWEEN DATEADD(m, DATEDIFF(m, 0,DATEADD(month,-3,getdate())), 0) AND DATEADD(m, DATEDIFF(m, 0,DATEADD(month,1,getdate())), 0)
Run Code Online (Sandbox Code Playgroud)

这是您的开始日期和结束日期功能

SELECT DATEADD(m, DATEDIFF(m, 0,DATEADD(month,-3,getdate())), 0)
2015-02-01 00:00:00.000

SELECT DATEADD(m, DATEDIFF(m, 0,DATEADD(month,1,getdate())), 0)
2015-06-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

具体日期:

Declare @YourDate as date = '6/3/2015' -- note the format is mm/dd/yyyy
SELECT CAST(DATEADD(m, DATEDIFF(m, 0,DATEADD(month,-3,@YourDate)), 0) as date)
SELECT CAST(DATEADD(m, DATEDIFF(m, 0,DATEADD(month,1,@YourDate)), 0) as date)
Run Code Online (Sandbox Code Playgroud)