簡體   English   中英

MySQL的結果是昨天,上周,上個月和去年

[英]MySQL results yesterday, last week, last month and last year

我的DateField( artists.onlineDate )為YYY-MM-DD HH:MM:SS

現在我得到:

-- Today
SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE()
-- Current Week
SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(CURDATE(), 3)
-- Current Month
SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(CURDATE())
-- Current Year
SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(CURDATE())

但是我需要的是確切的:昨天,上周,上個月,去年

我試圖解釋。 如果我們是星期三,並且我使用SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE() ,那么我將在星期一到星期三。

我想有上個星期的星期一至星期日。 前一周的日歷。

和月份和年份相同。

SUB_DATE是不正確的方法。

有什么建議么?

確定,我找到了想要的東西:

MySQL查詢選擇上周的數據?

SELECT * FROM testwoche 
 WHERE WEEK (datum, 3) = WEEK(current_date, 3) - 1 
   AND YEAR(datum) = YEAR(current_date) ORDER BY datum DESC

一樣的一個月

SELECT * FROM testwoche 
 WHERE month (datum) = month(current_date) - 1 
  AND YEAR(datum) = YEAR(current_date) 
ORDER BY datum DESC

這樣可以返回周一至周日的最后一周以及最后一個月

謝謝大家的幫助!

我認為您可以使用SUBTIME函數: https ://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_subtime

我還沒有時間進行真正的測試,但是我想您知道了:

昨天:

 SELECT * FROM artists WHERE DATE(artists.onlineDate) = SUBTIME(CURDATE(),'1 0:0:0');

上個星期

SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(SUBTIME(CURDATE(),'7 0:0:0'), 3)

上個月

SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(SUBTIME(CURDATE(),'31 0:0:0'))

去年

SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(SUBTIME(CURDATE(),'365 0:0:0'))

要獲取特定的周/月/年(當您的數據庫中包含數年的數據,並且當前時間是新的一年的開始時,這仍然有效):

SELECT * FROM testwoche WHERE 
((YEAR(CURDATE())-YEAR(datum)))*52-WEEK(datum,3)+WEEK(CURDATE(),3) = 1;

如果需要兩周前,可以將其更改為=2 (如果要使用本周,則從星期一到當前天: =0 )。 如果需要上個月,請將WEEK函數更改為MONTH

暫無
暫無

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

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