现在要的条件是和以前正好相反一般语句都这样的select column1 form table where column2 like ''%'+var1+'%'''可是我的column2比变量短,比如说是 "党员" 而变量var1却很长,比如"共产党员,共青团员"等,现在要求把在column2中被var1包含的数据选择出来,和平常要求正好相反,in也不行,怎么办??

解决方案 »

  1.   

    现在没有环境帮你测试,试试下面的代码可行不
    select column1 from table where exists(select  * from (select var1  as column3) a where column3 like '%'+table.column2+'%')
      

  2.   

    不行的,select var1? 有问题.就算是用类似这样的语句查出来,也是没有用的,因为条件有10多个 ,都是这样的情况.10万数据,那这么用.
      

  3.   

    那val1是的个数是已知的不?或者可以用程序动态得到?如果是那就好办了====================================
    select column1 from table where exists(select  * from 
    (select var1  as column3)
     a where column3 like '%'+table.column2+'%')
    ====================================
    下面把第二行代码扩展开来,比如var1有三个值 '001','002','003'那就成了:
    ====================================
    select column1 from table where exists(select  * from 
    (select '001' as column3 union select '002' as column3 union select '003' as columns)
     a where column3 like '%'+table.column2+'%')
    ====================================
      

  4.   

    var1可以取到的,仔细看了一下,明白了你的意思,不过这个速度...应该有更好的变通方法吧,我再静心想一下
      

  5.   

    你也可以把var1做成某个表b1的某一个列,那么就可以
    select column1 form table
    left join b1 on
    b1.var1 like ''%'+table.column2+'%'''
      

  6.   

    找到答案了,顺便贴出来,charindex
      

  7.   

    用Charindex可以解决问题例如
    Select top 10 name FROM syscolumns where charindex('base',[name])>0name                                                                                                                             
    -------------------------------------- 
    base_schema_ver
    @database
    @database
    @database
    @basetable
    @base_objid
    @database
    @databasename
    @database
    @database_name(所影响的行数为 10 行)