我查了Get the records of last month in SQL server但它没有用!
我尝试根据我的数据库表和列DATEPART(month, CONVERT (VARCHAR(11),DATEADD(day,wo_header.issue_date,`1971/12/31`),106)) = DATEPART(month, DATEADD(month, -1, getdate()))
获取上个月的记录。
执行此操作的SQL查询是什么?
为了澄清,今天(27日至4月18日)我希望从3月18日起获得所有记录。
我将issue_date的格式转换为日期,但是代码下面给出了所有记录,从2018年3月1日到今天。
{{1}}
答案 0 :(得分:0)
获得上个月的firstDay和lastDay
DECLARE @FirstDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(DATEADD(m, -1, GETDATE() - 2))), DATEADD(m, -1, GETDATE() - 1))),
@LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(GETDATE())), GETDATE()))
SELECT @FirstDayOfLastMonth, @LastDayOfLastMonth
您需要的查询
SELECT *
FROM TABLE
WHERE CAST(issue_date AS DATE) BETWEEN CONVERT(DATE, DATEADD(d, -(DAY(DATEADD(m, -1, GETDATE() - 2))), DATEADD(m, -1, GETDATE() - 1))) AND CONVERT(DATE, DATEADD(d, -(DAY(GETDATE())), GETDATE()))
答案 1 :(得分:0)
也许最简单的方法是eomonth()
。如果issuedate
上没有时间组件:
where issuedate > eomonth(getdate(), -2) and
issuedate <= eomonth(getdate(), -1)
如果有时间成分:
where issuedate >= dateadd(day, 1, cast(eomonth(getdate(), -2) as date)) and
issuedate < dateadd(day, 1, cast(eomonth(getdate(), -1) as date))
没有eomonth,我会这样做:
凡颁发的&lt; cast(dateadd(day,1 - day(getdate()),getdate())as date)和 issate&gt; = dateadd(month,-1,cast(dateadd(day,1 - day(getdate()),getdate())as date))
答案 2 :(得分:0)
我发现的代码并不漂亮,但它有效。它首先将包含月份编号的额外列添加到我的代码的 SELECT 部分:
Month(CONVERT (VARCHAR(11),DATEADD(day,wo_header.closing_date,'1971/12/31'),106)) As Month
用于 WHERE 语句:
Month(CONVERT (VARCHAR(11),DATEADD(day,wo_header.closing_date,'1971/12/31'),106)) = month(getdate())-1
因此对于像我这样在SQL报告中工作的人来说,它应该可以工作。