【问题标题】:Query to Select where timestamp between date1 and date 2查询以选择 date1 和 date 2 之间的时间戳
【发布时间】:2015-01-28 10:53:11
【问题描述】:

我有 MySQL 表

 id     product             p_image
 1      G           images\20131030164545.jpg
 2      S           images\20131230164545.jpg
 3      V           images\20140110164545.jpg
 4      R           images\20140320164545.jpg
 5      K           images\20140526164545.jpg
 6      L           images\20150110164545.jpg
 7      SK          images\20150120164545.jpg

这里我需要从上表中提取两个日期之间的 p_image 时间戳的产品(例如我需要从 2013/12/01 到 2014/07/30 日期提取)

在此查询中,我需要从字符串“images\20140526164545.jpg”中提取时间戳并将其转换为日期格式并选择两个日期之间的值。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    假设字符串的格式是固定的(看起来是这样),您可以使用substr函数提取时间戳,然后将其转换为日期并按其过滤。像这样的东西应该可以工作:

    select * from table1
    where cast(substr(p_image FROM 7 FOR 14) as date)
    between '2013/12/01' and '2014/07/30'
    

    Sample SQL Fiddle

    可能有更有效的方法可以做到这一点,但这应该会给你一个开始的想法。

    编辑:如果字符串可以改变 left(right(p_image, 18), 14) 之类的东西应该可以工作。

    【讨论】:

    • 您好 jpw,感谢您的回复,在“p_image”列中,我也有一些不同的文件夹名称。例如我有 images_new\20140320164545.jpg
    • @AGR 好的,我已经用一个可能的解决方案更新了我的答案,该解决方案只假设最后一部分始终是包含 14+4 个字符的文件名。
    • 我在查询下面运行 SELECT * FROM table1 WHERE CAST(SUBSTR(LEFT(RIGHT(p_image, 18), 14)) AS DATE) BETWEEN '2013/12/01' AND '2014/02/ 30';并且收到 mysql 错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ') AS DATE) BETWEEN '2013/12/01' AND '2014/02/30' LIMIT 0, 30' 附近使用正确的语法
    • @AGR 应该是WHERE CAST(LEFT(RIGHT(p_image, 18), 14) AS DATE)
    【解决方案2】:

    p_image 中的日期采用 YYYYMMDD 格式,因此您可以将它们作为字符串进行比较。也就是说,没有理由将字符串转换为日期数据类型。

    因此你可以这样做:

    where substr(p_image, 8, 8) between '20131201' and '20140730'
    

    如果日期的位置不固定但总是在/之后,你可以这样做:

    where left(substring_index(p_image, '/', -1), 8) between '20131201' and '20140730'
    

    【讨论】:

      【解决方案3】:

      试试这个,它会起作用的:

      select * from `datetest` where substr(p_image, 8, 8) between '20131201' and '20140730'
      

      Phpmyadmin 截图:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 1970-01-01
        • 2017-03-30
        • 2018-04-17
        • 2016-10-20
        相关资源
        最近更新 更多