2015-10-15 58 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

相关问题