次のコマンドを使用して、現在の月のレコードを選択しようとしています。
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 BYWHERE句の後に来る必要があります:
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