2016-02-09 27 views
1

我有一個包含兩列「date_from」和「date_to」的表格。當用戶輸入一個日期,我想要得到的行選擇日期之間的那兩個,但在這些日期的年份不重要我 - 只有幾個月形成像季節我已經到了這個:MySQL在兩個日期之間選擇行,無論年份如何

SELECT `date_from` , `date_to` 
FROM `language_courses_accommodation_periods` 
WHERE DATE_FORMAT( `date_from` , '%c') <= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%c') 
AND DATE_FORMAT( `date_to` , '%c') >= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%c') 
AND DATE_FORMAT( `date_from` , '%e') <= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%e') 
AND DATE_FORMAT( `date_to` , '%e') >= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%e') 

這在某些情況下有效,但一個賽季可以在11月開始, 在3月結束,然後我的查詢doesent返回正確的結果。

+3

可能重複的[MySQL選擇兩個日期之間的所有條目,無論年份](http://stackoverflow.com/questions/8198258/mysql-select-all-entries-between-two-dates-regardless-of-year ) –

+0

我想知道爲什麼你有4個條件而不是兩個。基於'%c'的支票將產生與'%e'支票相同的結果,或者我錯過了什麼?我的意思是2017-02-01 <= 2017-02-01會產生真實情況,就像2017-02-28 <= 2017-02-028,不是? – trincot

回答

0

已更新:試試這個查詢它可能工作分裂從你創造太多的答案的可能性的月份的日子。

SELECT `date_from` , `date_to` 
    FROM `language_courses_accommodation_periods` 
    WHERE DATE_FORMAT( `date_from` , '%c-%d') <= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%c-%d') 
    AND DATE_FORMAT( `date_to` , '%c-%d') >= DATE_FORMAT(STR_TO_DATE( '2017-02-03', '%Y-%m-%d') , '%c-%d') 
+0

我曾嘗試過,但在某些情況下可能沒有選擇日期的現有季節。然後,查詢將返回基於OR條件的錯誤結果。 例如: date_from:2016-07-03; date_to:2016-08-14; 搜索日期:2016-05-04 – ppepii

+0

你試過我發佈的那個嗎?我取決於你如何包裹括號。他們會產生不同的結果。您還應該嘗試將月份和日期結合在一起,因爲該日期應該顯示爲03和14之間的值,以滿足其中一個條件。生病更新我的答案與另一個建議,你可以嘗試 – AersolKing

0

使用BETWEEN,不關心的參數在正確的順序:

SELECT `date_from`, `date_to` 
FROM `language_courses_accommodation_periods` 
WHERE DATE_FORMAT(STR_TO_DATE('2017-02-03', '%Y-%m-%d'), '%c') 
      BETWEEN DATE_FORMAT(`date_from`, '%c') 
       AND DATE_FORMAT(`date_to`, '%c') 

我不認爲這是與%e格式重複這種狀況的任何附加價值。

相關問題