Php 使用LIKE查询MySQL范围

Php 使用LIKE查询MySQL范围,php,mysql,sql,range,Php,Mysql,Sql,Range,我的mysql表中有一个ref字段,其中包含类似于“0-0-at-3267-201411041356”的值。第一部分0-0-at-3267-长度和值不同,第二部分201411041356是引用创建日期/时间的日期/时间。将检查此代码用于的所有内容,以查看其是否在特定日期/时间段内,例如201409010000和201508312359之间 通常情况下,我可以简单地分解数据,然后进行测量,但在这个例子中,这会使它太笨重。因此,我要做的是在查询中使用LIKE函数,如“%201411041356”,但

我的mysql表中有一个ref字段,其中包含类似于“0-0-at-3267-201411041356”的值。第一部分0-0-at-3267-长度和值不同,第二部分201411041356是引用创建日期/时间的日期/时间。将检查此代码用于的所有内容,以查看其是否在特定日期/时间段内,例如201409010000和201508312359之间

通常情况下,我可以简单地分解数据,然后进行测量,但在这个例子中,这会使它太笨重。因此,我要做的是在查询中使用LIKE函数,如“%201411041356”,但我想将其与>和“%201409010000”以及ref-LIKE<“%201508312359”一起使用

任何想法都欢迎!顺便说一句,这一直是存储数据的方式,而且数据量很大,因此更改数据不是一个选项

SELECT *
FROM my_table 
WHERE SUBSTRING(ref,-12) BETWEEN '201409010000' AND '201508312359'` 

对于最后12个字符的减法效果更好。

能否在减法字符串上使用between,例如:

SELECT * FROM my_table WHERE SUBSTRING(ref,-12) BETWEEN '201409010000' AND '201508312359'

因为你写的第一部分可能有不同的长度,所以你有从结尾开始的条带子串

所以你的quwery may看起来像:

SELECT * FROM table 
WHERE
SUBSTRING('ref', -12) > $from
AND 
SUBSTRING('ref', -12) < $to

如果您只想按日期计量,请使用:

left(right(ref, 12), 8)

如果您使用的是大于和小于,为什么需要一个LIKE?因为我也需要通配符,因为数据的第一部分不是固定的。谢谢。你能在一个查询示例中显示这一点吗?这样我就可以看到你在这里做什么了?从我的表格中选择*,其中leftrightref,12,8介于'20141104'和'20141108'之间。哇,这是一个简单但有效的解决方案,效果非常好。非常感谢。有时简单是前进的方向