SQL SERVER和Oracle中in查询在实际中的应用

来源:互联网 发布:js身份证号正则表达式 编辑:程序博客网 时间:2024/06/09 19:50

        在实际项目中,我们常常会遇到前台传入一个字符串,字符串用符号(比如逗号‘,’)隔开的情况。我们都知道不论是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)



阅读全文
1 0