我正在努力思考获取上个月内创建的所有行/记录的最简单方法。我可以在下面构建某种复杂的模型,但是有没有更简单的方法?
SELECT
*
FROM
MyTable
WHERE
MONTH( createdAt ) >= MONTH( GET_DATE() ) - 1
AND
YEAR( createdAt ) = YEAR( GET_DATE );
以上方法适用,但不适用于12月的记录。有什么建议可以简化操作并处理12月创建的记录吗?
答案 0 :(得分:0)
DECLARE @startOfMonth date = DATEFROMPARTS( YEAR( SYSUTCDATETIME() ), MONTH( SYSUTCDATETIME() ), 1 )
SELECT
*
FROM
myTable
WHERE
createdAt >= @startOfMonth
或内联它(SQL Server应该检测到RHS是常量,因此使用变量不会提高性能):
SELECT
*
FROM
myTable
WHERE
createdAt >= DATEFROMPARTS( YEAR( SYSUTCDATETIME() ), MONTH( SYSUTCDATETIME() ), 1 )
答案 1 :(得分:0)
如果您正在寻找上个月内的记录,我假设您的意思是最近30天将有效:
SELECT *
FROM myTable
where createdAt >= CAST(DATEADD(day,-30,GETDATE()) as date)
如果您实际上正在查找上个月的记录,那么它将起作用:
SELECT *
from myTable
WHERE createdAt >= CAST( DATEADD(month, DATEDIFF(month, -1, GETDATE()) - 2, 0) as date)