我正在尝试使用以下选项来选择具有当月的记录:
SELECT * FROM postdata
ORDER BY postdate DESC
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
postdate的日期格式为YYYY-MM-DD
(例如2012-06-30
),但遗憾的是没有返回任何记录。这是使用的正确MySQL语句吗?
答案 0 :(得分:11)
目前还不完全清楚这是你的意图,但似乎我会作出回答:
除了ORDER BY
不合适之外,您必须比较两个月份和日期。由于函数MONTH()
仅返回1到12的数字,因此查询将返回所有年份的6月的所有记录,而不是仅返回当前年份。同时使用MONTH(), YEAR()
来比较当前年份的月份。
SELECT * FROM postdata
WHERE
MONTH(postdate) = MONTH(CURDATE())
AND YEAR(postdate) = YEAR(CURDATE())
ORDER BY postdate DESC
答案 1 :(得分:2)
ORDER BY
必须在WHERE
子句之后:
SELECT * FROM postdata
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
ORDER BY postdate DESC
这样想:
WHERE
从the documentation(已剥离),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
答案 2 :(得分:1)
当月
WHERE DATE_FORMAT(date_column ,'%Y-%m') = DATE_FORMAT(NOW() ,'%Y-%m')
您想要的月份过滤
WHERE DATE_FORMAT(date_column ,'%Y-%m') = DATE_FORMAT(NOW() ,'%Y-05')
答案 3 :(得分:0)
试试这个::
SELECT * FROM postdata
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
YEAR(postdate) = YEAR(CURRENT_DATE)
ORDER BY postdate DESC