在实际项目中,我们常常会遇到前台传入一个字符串,字符串用符号(比如逗号‘,’)隔开的情况。我们都知道不论是Oracle还是sqlserver数据库in后面的条件都是多个字符串,这就意味着我们需要把前台传入的用符号分割开的一个字符串拆分成多个。
在SQL SERVER中:
我们是用的charindex函数,charindex函数怎么用的我就不多介绍,请自行百度。我只说具体在项目中的应用。
sql语句: select * from kpi_KPI_DEFINE where charindex(','+convert(varchar,kpitype)+',',','+'2,2,3'+',')>0
kpitype是要对kpi_KPI_DEFINE 表中做in查询(功能相同,本条语句中没有用in)的字段,字符串‘1,2,3’就是开始所说的前台传入的字符串。ok,大功告成,是不是很简单!需要注意的是第一个参数必须是字符串类型的,否则会报错,所以这里用到了convert函数转换一下类型,如果字段本身就是字符串类型的就不用转换了。
在Oracle中:
在Oracle中实现方案1:REGEXP_SUBSTR函数。具体应用:
SELECT * FROM kpi_KPI_DEFINE WHERE KPINAME IN (
SELECT REGEXP_SUBSTR(REPLACE('永安,复保,鼎睿,葡保,MIG',';',''),'[^,]+',1,LEVEL,'i') FROM DUAL
CONNECT BY LEVEL <= LENGTH('永安,复保,鼎睿,葡保,MIG') - LENGTH(REPLACE('永安,复保,鼎睿,葡保,MIG', ',', ''))+1
)
在Oracle中实现方案2:instr函数
SELECT * FROM kpi_KPI_DEFINE where instr('1,2,3',KPINAME )>0 这个是后来加上的 新发现的一种更好用的用法(20171205)