检查一个月的最后两天

时间:2016-07-19 07:37:13

标签: sql sql-server sql-server-2008 sql-server-2012

我想查看每个月最后两天的预订是什么,我已经在最后一天做了但是我给了我一些错误的数据,我需要扩展它以获得不仅是最后一天而且每个月的最后两天

SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date IN (
        SELECT MAX(Booking_date)
        FROM [dbo].[Test_data]
        GROUP BY MONTH(Booking_date), YEAR(Booking_date)
        )

3 个答案:

答案 0 :(得分:0)

这将为您提供预订当月最后2天的所有预订。如果booking_date存储时间,它将无法工作。

SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date between 
  DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 2  AND
  DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 1

如果您在booking_date上存储时间:

SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 2  AND
      Booking_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0)

答案 1 :(得分:0)

另一种方法是使用calendar table,一旦您拥有如下所示的日历表,那么很容易获得所有信息

enter image description here

上面的日历表为我提供了所需的日期,您只需加入下一个

select t1.* from
dbo.testdate t1
join
(select date from calendar
where date>=convert(datetime,dateadd(day,-1,LDtOfMo))  and year=2013
) c
on c.date=t1.booking_Date

答案 2 :(得分:0)

SQL Server有一个名为SQL EOMonth() for calculating end of month

的新日期函数
EOMONTH (getdate())

在月末结束后,您可以在前一天使用以下内容

DATEADD(dd,-1,@eomonth_date)