建立了一个表DAT_SUM,其中有两个字段,C_NO和C_CODES,当然还有其他字段,C_NO是唯一的,C_CODES是字符型,保存的是一些代码的组合,可以就一个代码(代码都是数字,但是是字符型的),如'1'或'131'等,也可能是用逗号(,)隔开的几个代码集,如('1','23','12')。现在要写一个查询语句,SELECT出所有包含代码'1'、'3'和'12'的记录。
如果C_CODES只包含一个代码很好办。但现在表中的一些记录中C_CODES字段包含了多个代码,就不知道该如何处理了,请教高人?谢谢了

解决方案 »

  1.   

    select * from dat_sum
    where charindex(',1,',','+c_codes+',')>0
    or charindex(',3,',','+c_codes+',')>0
    or charindex(',12,',','+c_codes+',')>0
      

  2.   

    如果能保证C_CODES是从小到大顺序排列的,可以使用C_CODES LIKE '%''1''%''3''%''12''%'这样的语句
    如果不能保证,一个是可以写自定义函数,一个是可以通过分割参数拼语句拼出C_CODE LIKE '%''1''%' OR C_CODE LIKE '%''3''%' OR C_CODE LIKE '%''12''%'这样的条件最后输出一个EXEC实现。
      

  3.   

    select * from dat_sum 
    where charindex(',1,', ','+c_codes+',') >0
    or charindex(',2,', ','+c_codes+',') >0
    or charindex(',12,', ','+c_codes+',') >0;
      

  4.   


    select * from dat_sum  
    where charindex(',1,', ','+c_codes+',') >0
    or charindex(',2,', ','+c_codes+',') >0
    or charindex(',12,', ','+c_codes+',') >0;
      

  5.   

    SELECT * FROM DAT_SUM 
    WHERE C_CODES LIKE '%1%' OR C_CODES LIKE '%3%' OR C_CODES LIKE '%12%'
      

  6.   

    这个应该不行吧,会把'123'之类的也SELECT出来的
      

  7.   

    select * from dat_sum  
    where charindex(',1,', ','+c_codes+',') >0
    or charindex(',2,', ','+c_codes+',') >0
    or charindex(',12,', ','+c_codes+',') >0;