帮助中心 >  技术知识库 >  数据库 >  相关技术支持 >  字符串在某字段里时,如何写搜索的SQL语句

字符串在某字段里时,如何写搜索的SQL语句

2018-01-18 23:34:48 7294

问题描述:

经常遇到这种问题,我们搜索的条件是某字符串包含在某字段,如果是某字段包含在某字符串,我们知道可以用in,如sql="select * form tb where tb.name in(" & names & " )”  注释:name是表tb的字段,name是获得的字符串,该句查询字段name在给的字符串names里的所有集合)

这种方法自然不必多说,但我们通常遇到的问题是“反着来”,即  "name"字符串 在 tb.name表字段里,如,表tb的name字段值为:张三,李四,王五,赵六而我们要查询的name=张三,这就要判断当表的name字段包含查询条件,也就是有“张三”时,即为符合查询


解决方法:

1、最先想到的当然是like查询。如sql="select * form tb where tb.name  like  '%" & 张三 & "%' ” 

这个语句能查询到所有表的name字段里有”张三“的集合,可是,假设有人的名字叫”秦张三八“,也有”张三“两个字,这样很显然也符合查询情况,那么他自然也会被查询出来,而我们只要”张三“,不要”秦张三八“,如何解决?


2、试想一下,如果字段里的值不是“张三,李四,王五,赵六”,而是“,张三,李四,王五,赵六,”

发现什么了?

是的,字符串前后多了个逗号,这就有用了,因为限制条件,按逗号来控制查询,就精确到位了。

好了,改写查询成:sql="select * form tb where tb.name  like  '%," & 张三 & ",%' ”

到此,原理和解决方法就已经全部说完了,但是,你可能还会遇到以下问题,继续看第三步。


3、有时类似这种带逗号的字段都是我们在保存的时候勾选了多选check得来的值,

这时写入数据库的时候,会自动在不同的check值后加上逗号。

比如,请选择你的兴趣爱好,你可能会勾选“看书(value=1)”,“听歌(value=21)”,“爬山(value=13)”

此时得到的值就是xingquaihao="1, 21, 13",将这个字段保存,在数据库里也就是这种格式,但是此时如果直接按照上面的查询方式来查询的话,

直接用:sql="select * form tb where xingquaihao  like  '%" & 1 & "%' ”   将得到所有含1的,就算是21、13中的1,也会被查出来

将字段前后加上逗号,变成“,1, 21, 13,”的时候,如果我们查21或者13,改成:sql="select * form tb where xingquaihao  like  '%," & 21 & ",%' ” 

结果是什么都查不出来


为什么明明有值,却查不出来呢?

因为自动勾选,然后保存的字段中间有空格,比如“1, 21, 13”,1的后面是一个逗号,逗号后面是一个空格,然后才是21

解决方法很简单了,在勾选完后,入库前把空格去掉,

xingquaihao="1, 21, 13"

xingquaihao=replace(xingquaihao," ","") '将空格删除

之后再查询就可以有结果了

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: