SQL Query for retreiving records that fall on the last day of the month

感情迁移 提交于 2019-12-01 13:34:02

Use the DateSerial Function to compute the last day of the month for a given date.

Passing zero as the third argument, day, actually returns the last date of the previous month.

rdate = #2013-7-24#
? DateSerial(Year(rdate), Month(rdate), 0)
6/30/2013 

So to get the last date from the rdate month, add 1 to the month argument.

? DateSerial(Year(rdate), Month(rdate) + 1, 0)
7/31/2013 

You might suspect that approach would break for a December rdate, since Month() + 1 would return 13. However, DateSerial still copes with it.

rdate = #2013-12-1#
? DateSerial(Year(rdate), Month(rdate) + 1, 0)
12/31/2013 

If you will be running your query from within an Access application session, you can build a VBA function based on that approach, and use the custom function in the query.

However, if the query will be run from an ODBC or OleDb connection to the Access db, the query can not use a VBA user-defined function. In that situation, you can use DateSerial directly in your query.

SELECT m.*
FROM mytable AS m
WHERE m.rdate = DateSerial(Year(m.rdate), Month(m.rdate) + 1, 0)

That should work if your rdate values all include midnight as the time component. If those values include other times, use DateValue.

WHERE DateValue(m.rdate) = DateSerial(Year(m.rdate), Month(m.rdate) + 1, 0)

Try This.

SELECT * FROM mytable
WHERE DATEPART(d, mytable.rdate) = 
DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0))

Try this one, this is tested on MS Access:

Using String Concatenation:

SELECT * FROM mytable
WHERE 
DatePart('d',mytable.rdate) = 
DatePart('d',dateadd('m',1, "1/" & DatePart('m',mytable.rdate)  & "/" & DatePart('yyyy',mytable.rdate))-1);

Update without using string concatenation:

SELECT * FROM
(SELECT *,
DATEPART('d',DATEDIFF('m',0,mytable.rdate)+1,
DATEADD('m',1,
DATEADD('d',DATEDIFF('d',0,mytable.rdate)- DATEPART('d',mytable.rdate)+1,0))-1) as EOMonth
FROM mytable ) A
WHERE DATEPART('d',mytable.rdate) = DATEPART('d',EOMonth)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!