从SQL Server上个月获取数据

时间:2018-04-27 13:55:10

标签: sql sql-server tsql

我查了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}}

3 个答案:

答案 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报告中工作的人来说,它应该可以工作。