【问题标题】:SQL query to select dates between two dates where dates are stored with commasSQL查询以选择两个日期之间的日期,其中日期用逗号存储
【发布时间】:2016-01-14 05:08:55
【问题描述】:

我使用的是Multidatespicker,所以我的数据库中有如下日期:

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

解决方案是使用“LIKE”之类的东西,但如果可能的话,不要使用:

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

有什么想法吗?

谢谢。

【问题讨论】:

  • (很明显,它改变了表格,使其每行只有值)
  • 合乎逻辑的解决方案是对数据使用单个值,但我想知道这是否可能
  • 更准确地说,正确的做法是规范化您的数据。
  • 重新设计你的数据结构

标签: php mysql sql date jquery-multidatespicker


【解决方案1】:

您肯定应该重新设计您的架构。

但作为一个研究案例,您可以:

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 到 valuelist 列中的最大元素数。

(c) 基于https://stackoverflow.com/a/17942691/4421474的代码

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2015-04-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2012-03-12
    相关资源
    最近更新 更多