【发布时间】:2013-07-24 09:45:59
【问题描述】:
我有一张包含许多日期记录的表格。 我想执行一个查询,只返回该日期月份最后一天的记录。比如:
SELECT * FROM mytable
WHERE DATEPART(d, mytable.rdate) = DATEPART(d,DATEADD(m,1,DATEADD(d, -1, mytable.rdate)))
除非这不起作用,因为参数右侧的 rdate 应该是 dateadd 返回正确比较的月份的最后一天。
基本上有没有一种简洁的方法来进行这种比较? 等价的四分之一结束也很有帮助,但无疑更复杂。
编辑:
基本上我想检查给定日期是否是它所在月份(或季度)的最后一个日期。如果是,则返回该记录。这将涉及一些函数来返回任何日期的月份的最后一天。例如lastdayofmonth('2013-06-10') = 30(所以这条记录不会被返回。
EDIT2:
对于返回属于该季度最后一天的记录的情况,它们需要类似于:
SELECT * FROM mytable
WHERE DATEPART('d', mytable.rdate) = lastdayofmonth(mytable.rdate)
AND DATEPART('m', mytable.rdate) = lastmonthofquarter(mytable.rdate);
棘手的一点是lastdayofmonth() 和lastmonthofquarter() 函数
【问题讨论】:
-
一个月的最后一天总是比下个月的第一天早一天(在给定的年份)。
-
是的,问题是如何在 SQL 中到达那里,最好不使用字符串操作
标签: sql date ms-access dateadd datepart