2

次のコマンドを使用して、現在の月のレコードを選択しようとしています。

SELECT * FROM postdata 
ORDER BY postdate DESC 
WHERE MONTH(postdate) = MONTH(CURRENT_DATE)

事後日付の日付形式はYYYY-MM-DD2012-06-30たとえば)ですが、残念ながらレコードは返されません。これは使用する正しいMySQLステートメントですか?

4

4 に答える 4

11

これがあなたの意図であるかどうかは完全には明らかではありませんが、おそらくそうなので、私は答えとして貢献します:

場違いであることは別として、月と日付の両方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 
于 2012-06-30T21:20:37.167 に答える
2

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 
于 2012-06-30T21:17:58.487 に答える
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') 
于 2015-08-12T07:51:10.393 に答える
0

これを試して ::

    SELECT * FROM postdata 
      WHERE MONTH(postdate) = MONTH(CURRENT_DATE) 
    YEAR(postdate) = YEAR(CURRENT_DATE)
ORDER BY postdate DESC 
于 2012-06-30T21:13:32.257 に答える