首页 新闻 搜索 专区 学院

怎么查询名称对应的Id

0
悬赏园豆:5 [已解决问题] 解决于 2016-11-30 08:42

DECLARE @a VARCHAR(MAX)
SET @a='管理员1,管理员2'

字符串格式就是这样的,怎么用一个sql查询出管理员1的Id,管理员2的Id

比如管理员1的Id是1 管理员2的Id是2

结果是这样的 '1,2'

怎么才能用sql查询出这个结果呢?

sdns的主页 sdns | 初学一级 | 园豆:4
提问于:2016-11-29 17:14
< >
分享
最佳答案
0

http://www.cnblogs.com/aierong/archive/2008/11/19/sqlserver_split.html

 

我之前一般用第二种。最后拿到一个table再join

收获园豆:5
Daniel Cai | 专家六级 |园豆:10374 | 2016-11-29 17:21
其他回答(3)
0

虽然能这么干,但貌似不推荐这么干。

顾晓北 | 园豆:10215 (专家六级) | 2016-11-29 17:23
0

一开始看到想用in的,好想拼接出来。最后试了好久不行。

下面是我测试可行的方法

create table test
( Id int primary key,
Name nvarchar(50)
)

insert into test values(1,'test1');
insert into test values(2,'test2');
insert into test values(3,'test3');

select * from test

declare @str nvarchar(max),@index int,@temp nvarchar(max)
set @str='test1,test2,test3'


--用临时表来存储暂存数据
drop table #temp_Table
create table #temp_Table
(
Name nvarchar(max)
)
--去除左右的空格
set @str=RTRIM(ltrim(@str))

set @index=CHARINDEX(',',@str);
while(@index>0)
begin
set @temp=SUBSTRING(@str,0,@index);
insert into #temp_Table values(@temp)
set @str=SUBSTRING(@str,@index+1,LEN(@str));
set @index=CHARINDEX(',',@str);
end
insert into #temp_Table values(@str);


--列出临时表的数据,然后再用联表查询
select * from #temp_Table

select Id from test
where name in (select Name from #temp_Table)

--输出成这种格式'1,2,3',

declare @str3 nvarchar(max)
select @str3=ISNULL(@str3+',','')+
CAST(Id as nvarchar) from(select Id from test
where name in (select Name from #temp_Table)) AS T

select @str3

GDOUJKZZ | 园豆:313 (菜鸟二级) | 2016-11-30 09:25
0

拼接成字符串,然后in,最后exec(@sql)

DECLARE @a VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)
SET @a='管理员1,管理员2'

set @sql='select * from table where id in('+@a+')'

exec(@sql) 

Merger | 园豆:225 (菜鸟二级) | 2017-04-12 10:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册