Mysql 查询以选择日期1和日期2之间的时间戳的位置

Mysql 查询以选择日期1和日期2之间的时间戳的位置,mysql,sql,Mysql,Sql,我有一张桌子 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 ima

我有一张桌子

 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_图像时间戳位于两个日期之间,例如,我需要从2013/12/01到2014/07/30日期提取产品


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

假设字符串的格式是固定的(看起来是固定的),您可以使用substr函数提取时间戳,然后将其转换为日期并根据它进行过滤。像这样的方法应该会奏效:

select * from table1
where cast(substr(p_image FROM 7 FOR 14) as date)
between '2013/12/01' and '2014/07/30'
也许有更有效的方法可以做到这一点,但这应该给你一个开始的想法


编辑:如果字符串可以改变leftrightp_图像之类的内容,则18、14应该可以工作。

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

select * from table1
where cast(substr(p_image FROM 7 FOR 14) as date)
between '2013/12/01' and '2014/07/30'
也许有更有效的方法可以做到这一点,但这应该给你一个开始的想法

编辑:如果字符串可以改变leftrightp_图像,则18和14应该可以工作。

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

因此,您只需执行以下操作:

where substr(p_image, 8, 8) between '20131201' and '20140730'
如果日期的位置不固定,但始终在/之后,则可以执行以下操作:

where left(substring_index(p_image, '/', -1), 8) between '20131201' and '20140730'
p_图像中的日期为YYYYMMDD格式,因此您可以将它们作为字符串进行比较。也就是说,没有理由将字符串转换为日期数据类型

因此,您只需执行以下操作:

where substr(p_image, 8, 8) between '20131201' and '20140730'
如果日期的位置不固定,但始终在/之后,则可以执行以下操作:

where left(substring_index(p_image, '/', -1), 8) between '20131201' and '20140730'
试试这个,它会起作用的:

Phpmyadmin的屏幕截图:

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

Phpmyadmin的屏幕截图:


您好,jpw,谢谢您的回复,在“p_图像”列中,我也有一些不同的文件夹名称。例如,我有图片\u new\20140320164545。jpg@AGR好的,我已经用一个可能的解决方案更新了我的答案,该解决方案只假设最后一部分始终是一个包含14+4个字符的文件名。我在下面运行查询选择*从表1,其中CASTSUBSTRLEFTRIGHTp_图像,18,14作为“2013/12/01”和“2014/02/30”之间的日期;我得到了mysql错误1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在“2013/12/01”和“2014/02/30”之间的“截止日期”附近使用的正确语法,第行的限制为0,301@AGR它应该是CASTLEFTRIGHTp_图像的位置,18,14作为日期Hi jpw,感谢您的回复,在“p_图像”列中,我也有一些不同的文件夹名称。例如,我有图片\u new\20140320164545。jpg@AGR好的,我已经用一个可能的解决方案更新了我的答案,该解决方案只假设最后一部分始终是一个包含14+4个字符的文件名。我在下面运行查询选择*从表1,其中CASTSUBSTRLEFTRIGHTp_图像,18,14作为“2013/12/01”和“2014/02/30”之间的日期;我得到了mysql错误1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在“2013/12/01”和“2014/02/30”之间的“截止日期”附近使用的正确语法,第行的限制为0,301@AGR它应该是CASTLEFTRIGHTPU图像的位置,18,14作为日期