次のコマンドを使用して、現在の月のレコードを選択しようとしています。
SELECT * FROM postdata
ORDER BY postdate DESC
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
事後日付の日付形式はYYYY-MM-DD
(2012-06-30
たとえば)ですが、残念ながらレコードは返されません。これは使用する正しいMySQLステートメントですか?
次のコマンドを使用して、現在の月のレコードを選択しようとしています。
SELECT * FROM postdata
ORDER BY postdate DESC
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)
事後日付の日付形式はYYYY-MM-DD
(2012-06-30
たとえば)ですが、残念ながらレコードは返されません。これは使用する正しいMySQLステートメントですか?
これがあなたの意図であるかどうかは完全には明らかではありませんが、おそらくそうなので、私は答えとして貢献します:
場違いであることは別として、月と日付の両方ORDER BY
を比較する必要があります。関数は1から12までの数値のみを返すため、クエリは現在の年だけでなく、すべての年の6月のすべてのレコードを返します。両方を使用して、現在の年の月を比較します。MONTH()
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