我想判断一个INT型ID是否在一个字符中,我将INT型ID转换成字符串
cast(tblUserInfo.kt_ID as varchar(50)) in(188,189,190,191,192,193,194,195,196,197,198,199,200,115)
(188,189,190,191,192,193,194,195,196,197,198,199,200,115)是通过另一表中的nvarchar字段,有办法解决吗?

解决方案 »

  1.   

    declare @str varchar(100)
    set @str='188,189,190,191,192,193,194,195,196,197,198,199,200,115'select * from tblUserInfo where charindex(','+rtrim(kt_ID)+',',','+@str+',')>0 
      

  2.   

    位数固定吗?是都三位?可以用charindex()
      

  3.   

    既然另一个表中存储的没有加单引号就不要将INT转换为Varchar了。
      

  4.   

    或者把188,189,190,191,192,193,194,195,196,197,198,199,200,115转换成int型也可以,这问题真麻烦。
      

  5.   

    (188,189,190,191,192,193,194,195,196,197,198,199,200,115)是另一个SQL语句(SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401)查询的结果。如果只是个字符串的话,就好处理了
      

  6.   

    '188,189,190,191,192,193,194,195,196,197,198,199,200,115' like '%,'+convert(varchar,tblUserInfo.kt_ID) +',%'
      

  7.   

    '188,189,190,191,192,193,194,195,196,197,198,199,200,115' 用字段名代替
    即:字段名 like '%,'+convert(varchar,tblUserInfo.kt_ID) +',%'
      

  8.   

    2楼那样处理就可以了啊select * from test where zf in(120,180)整数可以这样用
      

  9.   

    select * from test where zf in(select zf from test where zf=120 or zf=190)
      

  10.   

    我的SQL是这么写的,请各位给看看
      

  11.   

    select *
    from tblUserInfo
    where tblUserInfo.kt_ID  in (115,120)
    (SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401)
      

  12.   

    这语法....  不能这样子用吧
     in (115,120)
    (SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401)
    ----》in 
    (
    select 115 union all
    select 120 union all
    SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401
    )
      

  13.   

    不好意思,一着急发错了,我是想这么用
    select *
    from tblUserInfo
    where tblUserInfo.kt_ID  
    in (SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401)那个 in (115,120)只是测试的
      

  14.   

    有什么问题?select *
    from tblUserInfo
    where tblUserInfo.kt_ID  --前缀可拿掉
    in (SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401)
      

  15.   

    kt_sourceID  是一个nvarchar的字符串
    (188,189,190,191,192,193,194,195,196,197,198,199,200,115)kt_ID是int型,in的结果总是空。
      

  16.   

    2楼的可以满足你的需求不一定非要用in的,用In的话试一下下面的语句
    select *
    from tblUserInfo
    where cast(tblUserInfo.kt_ID as varchar(50))
    in (SELECT ''''+replace(substring(kt_sourceID,2,len(kt_sourceID)-2),',',''',''') +'''' FROM tblInfoSource where ui_ID=401)
      

  17.   

    select *
    from tblUserInfo
    where charindex(rtrim(kt_ID),(SELECT kt_sourceID  FROM tblInfoSource where ui_ID=401))>0
      

  18.   

    谢谢xyxfly(小虾米......BS问题解决不结贴)
    用你的方法正是我想要的结果,其它朋友的SQL我还得仔细研究研究,谢谢了!