2014-09-05 48 views
1

的,您好我有一個MySQL數據庫,在我設立一個表的研究日曆,字段說明如下:如何將目前的一週濾波器作爲一個日期範圍

SELECT 
studycalendarpk, 
studytopic, 
`module`, 
startdate, 
enddate, 
syllabusoutline 
FROM studycalendar 

什麼我想做的是創建一個查詢,以便儀表板php頁面有查詢當前周研究計劃的查詢。有人可以告訴我如何設置查詢篩選,以便它被選中,如果當前日期爲起始日期和結束日期之間,謝謝

+0

可以試試我的帖子? – 2014-09-05 11:25:10

回答

2

你有一個startdateenddate爲表中的每一行,如果我正確地理解你的要求,你要顯示滿足所有這些行這些標準。

WHERE enddate >= start of week 
    AND startdate < start of next week 

你已經在你的表startdateenddate。這個答案假設每行的enddate被限制爲大於或等於starttdate。如果不是,你會得到奇怪的結果。

您需要一個MySQL表達式來計算本週的第一天。以下是你如何做到這一點。

FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7)) 

該表達式產生緊接在CURDATE()之前的星期日。如果您的星期被認爲是星期一開始,請改用此代碼(請注意-2)。

FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -2, 7)) 

這些是非常有用的表達式,因爲它們會產生實際的日期。然後這些日期可以通過日期算術操作,例如somedate + INTERVAL 7 DAY,它可以方便地在一週後給出日期。這種算術甚至可以在上個星期和第一個星期的一個日曆年裏工作。

把它放在一起,這是你要做的選擇你想要的記錄。

WHERE enddate >= FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7)) 
    AND startdate < FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7)) 
        + INTERVAL 7 DAY 

這將從您的表中獲取與當前星期相關的記錄。

2
SELECT * 
FROM studycalendar 
where curdate() between startdate and enddate 
0

你能試試嗎?我們可以在本週末()方法GETT星期沒有用的

SELECT 
`studycalendarpk`, 
`studytopic`, 
`module`, 
`startdate`, 
`enddate`, 
CAST(week(now()) AS UNSIGNED) 
syllabusoutline 
FROM studycalendar WHERE CAST(week(now()) AS UNSIGNED) between CAST(week('2014-09-01') AS UNSIGNED) and CAST(week('2014-09-07') AS UNSIGNED) 
相關問題