三件事:
第一:日期看起來像2017-05-01
不5/1/2017
在大多數DBMS表示。
第二:你想要這種表達式(注意<
),以確保你得到所有的行。這是比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')
哪個sql數據庫? – maSTAShuFu