我想修改下面Where
中的SQL Server Query
子句,以便选择上个月的所有记录。
示例:如果我在2月20日运行查询,则应提取1月1日至1月31日的数据
我尝试使用以下内容,但正如您可能会注意到的那样,它会在执行之日起一个月内收集记录。
WHERE date_col >= cast(dateadd(Month, -1, getdate()) as date) and
date_col <= cast(getdate() as date)
答案 0 :(得分:2)
我并不是说这是最好的方式,但它应该有效:
SELECT * from YourTable
WHERE DATEPART(Month, date_col) = (DATEPART(Month,GETDATE()) - 1)
AND DATEPART(Year, date_col) = DATEPART(Year,DATEADD(Month, -1, GETDATE()))
答案 1 :(得分:2)
Sql Server 2012及更高版本
在这种情况下,EOMONTH看起来可能是一个有用的功能。 EOMONTH(getdate(), - 1)是上个月底。 EOMONTH(getdate(), - 2)是月末。
尝试类似
的内容WHERE date_col >= cast(EOMONTH(getdate(), -1) as date) and date_col <=
cast(EOMONTH(getdate(),-2) as date);
答案 2 :(得分:1)
获取上个月的最后一天和第一天:
SELECT DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH,-1,GETDATE())), 0) AS First_Day_Of_Last_Month
,DATEADD(s,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0)) AS Last_day_Of_Last_Month
╔═════════════════════════╦═════════════════════════╗
║ First_Day_Of_Last_Month ║ Last_day_Of_Last_Month ║
╠═════════════════════════╬═════════════════════════╣
║ 2014-05-01 00:00:00.000 ║ 2014-05-31 23:59:59.000 ║
╚═════════════════════════╩═════════════════════════╝
您的查询
WHERE date_col >= DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH,-1,GETDATE())), 0)
AND date_col <= DATEADD(s,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0))
答案 3 :(得分:1)
由于您需要上个月的所有记录,因此您只需比较当前日期的月份和年份部分以及date_col
值,如下所示:
select *
from yourtable
where
(month(date_col) = month(getdate()) - 1
and year(date_col) = year(getdate())
and month(getdate()) <> 1)
or
(month(date_col) = 12
and year(date_col) = year(getdate()) - 1
and month(getdate()) = 1)
答案 4 :(得分:1)
此查询也可以正常工作,并且答案也很好。
SELECT *
FROM Member
WHERE DATEPART(m, date_created) = DATEPART(m, DATEADD(m, -1, getdate()))
AND DATEPART(yyyy, date_created) = DATEPART(yyyy, DATEADD(m, -1, getdate()))