2015-10-15 96 views
1

我使用Multidatespicker所以我在我的數據庫日期如下:SQL查詢來選擇兩個日期之間的日期,其中日期的存儲用逗號

ID POST KEY     VALUE 
1  1  multipledates  20151020, 20151015, 20151101 
2  2  multipledates  20151103 
3  3  multipledates  20151022, 20151010, 20151202, 20160410 
... 

然後,我有「DATE_START」和「DATE_END」。我需要選擇這個日期之間的日期。

此SQL查詢只能在我的例子與ID2(因爲它有沒有逗號)

SELECT ... BETWEEN $date_start AND $date_end 

解決辦法是使用類似「喜歡」但如果可能的:

SELECT ... BETWEEN LIKE '%$date_start%' AND LIKE '%$date_end%' 

任何想法?

謝謝。

+4

(C)代碼(最明顯的事情就可以改變其表,以便它的每行僅值) –

+3

邏輯的解決辦法是對數據使用單一的價值觀,但我不知道這將是可能的 – kurtko

+3

更準確地說,正確的做法是標準化你的數據。 – Strawberry

回答

3

你應該重新設計你的模式。

但只是作爲研究案例,您可以:

http://sqlfiddle.com/#!9/22755/4

SELECT t.id, 
    t.date 
FROM (SELECT 
    t1.id, 
    DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(t1.value, ',', numbers.n), ',', -1)) `date` 
FROM 
    numbers 
    INNER JOIN t1 
    ON CHAR_LENGTH(t1.value) 
    -CHAR_LENGTH(REPLACE(t1.value, ',', ''))>=numbers.n-1 
ORDER BY 
    id, n) t 
WHERE t.date BETWEEN $date_start AND $date_end 

聲明本解決方案期望你有numbers表記錄值從1到您的value表列元素的最大數量。基於https://stackoverflow.com/a/17942691/4421474

相關問題