簡體   English   中英

Mysql如何過濾上一個CALENDAR月(不是上個月)的結果

[英]Mysql how to filter results from last CALENDAR month (not last month)

我嘗試從 MySQL 中為此/上一個和下一個日歷月選擇數據。 有幾個類似的帖子,但沒有一個是針對 1 月與去年或 12 月與下一年的。 我知道我可以在 PHP 中圍繞 SQL 做到這一點,但也許有人有很好的方法來解決 SQL 中的問題。 我試過用 MOD() 但這帶來了多年的問題。 即前一個日歷月避免 1 月為 0

SELECT * FROM tbl_reservations WHERE ( (MONTH(tbl_reservations.start) = MOD((MONTH(NOW()) +11 ), 12)) AND ( YEAR(tbl_reservations.start) = YEAR(NOW()) ) )

有任何想法嗎? 謝謝。

我認為這很容易。 對於最后一個日歷月:

where extract(year_month from r.start) = extract(year_month from now() - interval 1 month)

您可以在下個月使用類似的邏輯。

以上不是索引友好的。 索引友好的版本比較麻煩:

where r.start < curdate() - interval (1 - day(curdate()))  day and
      r.start >= (curdate() - interval (1 - day(curdate()))  day) + interval 1 month

這通過減去(1 - day(curdate()))天來獲得該月的第一天。 然后使用日期操作和比較來獲取上個月的日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM