数据库中有一字段存有一字符串,它是一些相关的数据拼接而成的。求以该字段的一部分数据作为条件查询信息
例如:该字段数据为 “XXX 180 红色 ”求180上下范围在150~200之间的记录有多少
这个也不难解决,只要将字段先进行切分,然后用having条件做筛选,就可以做到,请参考如下图文
//1.创建test1表,表结构及数据如下
//2.然后通过left函数进行切割,sql语句如下
SELECT id
,LEFT(NAME,7)FROM test1;
查到的数据就会成为如下所示
//3.把left函数切割后,再用right进行切割,得到如下结果
SELECT id
,RIGHT(LEFT(NAME,7),3)FROM test1;
查到的数据就会成为如下所示
//4.再把查询结果用having进行筛选,就可以得到你想要的范围的数据
SELECT id
,RIGHT(LEFT(NAME,7),3) newname FROM test1 HAVING newname BETWEEN 150 AND 200 ;
//5.最终结果如下,如果你要结果,请执行下边第一条sql语句,如果只要记录数,执行第二条sql即可
查询结果:SELECT id
,RIGHT(LEFT(NAME,7),3) newname FROM test1 HAVING newname BETWEEN 150 AND 200 ;
查询记录总数:SELECT COUNT(*) FROM (SELECT id
,RIGHT(LEFT(NAME,7),3) newname FROM test1 HAVING newname BETWEEN 150 AND 200)AS test2;
//查询结果分别如下
我得想法是先将这一段字符串取出来,根据拼接的特点将180截取出来,在进行条件查询(XXX 180 红色,拼接原理是什么,比如拼接的长度一样啊就很好操作了)
表既然敢这么设计,说明数据量不是特别大,建议还是老老实实在service代码中全部查询出来,轮训处理比较吧。
楼上的方法,表示XXX不能是XXXX,也不能是XX。
重点还是限制条件怎么写,即怎么取这个180数据,这个如果前面固定可以考虑left \right这种提取方式,如果不固定可以利用substr+insert或正则判断去取数据
SELECT *
FROM table
where (SUBSTRING(SUBSTRING(field, CHARINDEX(' ', field, 1) + 1, len(field)) ,1, CHARINDEX(' ', SUBSTRING(field, CHARINDEX(' ', field, 1) + 1, len(field)), 1))) between 150 and 200
备注:将table换成你的表名, field换成你的字段名称即可