三件事:
首先:在大多数 DBMS 表示中,日期看起来像 2017-05-01 而不是 5/1/2017。
第二:你想要这种表达式(注意<)来确保你得到所有的行。这比23:59:59 的东西更好。
where dateCreated >= '2017-05-01'
and dateCreated < '2017-06-01'
第三,你可能想要一种表达方式
where dateCreated >= first_day_of_last_month
and dateCreated < first_day_of_this_month
您不必每个月都更改查询。
这在不同品牌和型号的数据库服务器中的工作方式不同。你没有告诉我们你用的是哪一个,所以......
在 MS SQL Server 中,DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE()) 为您提供本月的第一天,所以
where dateCreate >=
DATEADD(MONTH, -1, DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE()))
and dateCreate <
DATEADD(DAY, 1-DATEPART(DAY, GETDATE()), GETDATE())
在 MySQL 中,DATE_FORMAT(CURDATE(), '%Y-%m-01') 在本月的第一天给你午夜,所以这个 where 子句获取上个月的行。
where dateCreated >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 1 MONTH
and dateCreated < DATE_FORMAT(CURDATE(), '%Y-%m-01')
在 Oracle 中(提示 如果我是一个有钱人,来自 屋顶上的提琴手)TRUNC(SYSDATE, 'MM') 给你一个月的第一天,所以这是上个月的行.
where dateCreate >= ADD_MONTHS(-1, TRUNC(SYSDATE, 'MM'))
and dateCreate < TRUNC(SYSDATE, 'MM')