我正在尝试使用以下方法选择当前月份的记录:
SELECT * FROM postdata
ORDER BY postdate DESC
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
postdate 的日期格式是YYYY-MM-DD
(2012-06-30
例如),但遗憾的是没有返回任何记录。这是要使用的正确 MySQL 语句吗?
我正在尝试使用以下方法选择当前月份的记录:
SELECT * FROM postdata
ORDER BY postdate DESC
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
postdate 的日期格式是YYYY-MM-DD
(2012-06-30
例如),但遗憾的是没有返回任何记录。这是要使用的正确 MySQL 语句吗?
目前尚不完全清楚这是您的意图,但似乎很可能,因此我将作为答案做出贡献:
除了您不合适之外,您ORDER BY
还必须比较月份和日期。由于该函数MONTH()
仅返回数字 1 到 12,因此查询将返回所有年份中六月的所有记录,而不仅仅是当前年份。使用两者MONTH(), YEAR()
来比较当年的月份。
SELECT * FROM postdata
WHERE
MONTH(postdate) = MONTH(CURDATE())
AND YEAR(postdate) = YEAR(CURDATE())
ORDER BY postdate DESC
ORDER BY
必须在WHERE
子句之后:
SELECT * FROM postdata
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
ORDER BY postdate DESC
可以这样想:
WHERE
从文档(精简)中,WHERE
出现在 ORDER BY
;
SELECT
...
[WHERE where_condition]
...
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
...
除了你的 OP 中的问题之外,你的逻辑实际上有点缺陷;您需要比较日期的月份和年份,否则将选择任何年份中具有相同月份的行。尝试这个:
SELECT * FROM postdata
WHERE
MONTH(postdate) = MONTH(NOW())
AND YEAR(postdate) = YEAR(NOW())
ORDER BY postdate DESC
这个月
WHERE DATE_FORMAT(date_column ,'%Y-%m') = DATE_FORMAT(NOW() ,'%Y-%m')
您想要的月份过滤
WHERE DATE_FORMAT(date_column ,'%Y-%m') = DATE_FORMAT(NOW() ,'%Y-05')
尝试这个 ::
SELECT * FROM postdata
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
YEAR(postdate) = YEAR(CURRENT_DATE)
ORDER BY postdate DESC