in的用法,折腾了我一下午!

seesea101 2006-08-29 04:20:51
我想判断一个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字段,有办法解决吗?
...全文
245 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
seesea101 2006-08-31
  • 打赏
  • 举报
回复
谢谢xyxfly(小虾米......BS问题解决不结贴)
用你的方法正是我想要的结果,其它朋友的SQL我还得仔细研究研究,谢谢了!
xyxfly 2006-08-29
  • 打赏
  • 举报
回复
select *
from tblUserInfo
where charindex(rtrim(kt_ID),(SELECT kt_sourceID FROM tblInfoSource where ui_ID=401))>0

toto1980 2006-08-29
  • 打赏
  • 举报
回复
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)
seesea101 2006-08-29
  • 打赏
  • 举报
回复
kt_sourceID 是一个nvarchar的字符串
(188,189,190,191,192,193,194,195,196,197,198,199,200,115)

kt_ID是int型,in的结果总是空。
xyxfly 2006-08-29
  • 打赏
  • 举报
回复
有什么问题?

select *
from tblUserInfo
where tblUserInfo.kt_ID --前缀可拿掉
in (SELECT kt_sourceID FROM tblInfoSource where ui_ID=401)
seesea101 2006-08-29
  • 打赏
  • 举报
回复
不好意思,一着急发错了,我是想这么用
select *
from tblUserInfo
where tblUserInfo.kt_ID
in (SELECT kt_sourceID FROM tblInfoSource where ui_ID=401)

那个 in (115,120)只是测试的
xyxfly 2006-08-29
  • 打赏
  • 举报
回复
这语法.... 不能这样子用吧


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
)
seesea101 2006-08-29
  • 打赏
  • 举报
回复
select *
from tblUserInfo
where tblUserInfo.kt_ID in (115,120)
(SELECT kt_sourceID FROM tblInfoSource where ui_ID=401)
seesea101 2006-08-29
  • 打赏
  • 举报
回复
我的SQL是这么写的,请各位给看看
xyxfly 2006-08-29
  • 打赏
  • 举报
回复
select * from test where zf in(select zf from test where zf=120 or zf=190)

xyxfly 2006-08-29
  • 打赏
  • 举报
回复
2楼那样处理就可以了啊

select * from test where zf in(120,180)

整数可以这样用
Jane_64 2006-08-29
  • 打赏
  • 举报
回复
'188,189,190,191,192,193,194,195,196,197,198,199,200,115' 用字段名代替
即:

字段名 like '%,'+convert(varchar,tblUserInfo.kt_ID) +',%'
Jane_64 2006-08-29
  • 打赏
  • 举报
回复
'188,189,190,191,192,193,194,195,196,197,198,199,200,115' like '%,'+convert(varchar,tblUserInfo.kt_ID) +',%'
seesea101 2006-08-29
  • 打赏
  • 举报
回复
(188,189,190,191,192,193,194,195,196,197,198,199,200,115)是另一个SQL语句(SELECT kt_sourceID FROM tblInfoSource where ui_ID=401)查询的结果。如果只是个字符串的话,就好处理了
seesea101 2006-08-29
  • 打赏
  • 举报
回复
或者把188,189,190,191,192,193,194,195,196,197,198,199,200,115转换成int型也可以,这问题真麻烦。
specialsoldier 2006-08-29
  • 打赏
  • 举报
回复
(188,189,190,191,192,193,194,195,196,197,198,199,200,115)如果是这样那就完美了,还处理啥呀

应该是:
('188','189'...)吧
toto1980 2006-08-29
  • 打赏
  • 举报
回复
既然另一个表中存储的没有加单引号就不要将INT转换为Varchar了。
achongsky 2006-08-29
  • 打赏
  • 举报
回复
位数固定吗?是都三位?可以用charindex()
子陌红尘 2006-08-29
  • 打赏
  • 举报
回复
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


marco08 2006-08-29
  • 打赏
  • 举报
回复
加單引號

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧