我有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'并将其转换为日期格式并选择两个日期之间的值。
请帮帮我..
答案 0 :(得分:3)
假设字符串的格式是固定的(看起来是这样),您可以使用substr
函数提取时间戳,然后将其转换为日期并按其过滤。这样的事情应该有效:
select * from table1
where cast(substr(p_image FROM 7 FOR 14) as date)
between '2013/12/01' and '2014/07/30'
可能有更有效的方法来做到这一点,但这应该让你有一个想法开始。
编辑:如果字符串可以变化,left(right(p_image, 18), 14)
之类的内容应该有效。
答案 1 :(得分:1)
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'
答案 2 :(得分:0)
尝试一下它会起作用:
select * from `datetest` where substr(p_image, 8, 8) between '20131201' and '20140730'
Phpmyadmin的屏幕截图: