****SQL实例问题******求助*****谢谢!

hcl8260 2014-07-07 10:43:11
SQLServer中,一个字符串是'1,3,5,6'
其中1,3,5,6等都是int型的。

declare @fid varchar(100)
set @fid='1,3,5,6'

如何将@fid处理一下,想得到这种效果:

select * from #t1 where fid in(1,3,5,6)

select * from #t1 where fid in('1','3','5','6')


在线等,多谢!!
...全文
103 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcl8260 2014-07-07
  • 打赏
  • 举报
回复
谢谢楼上两位大神
水族杰纶 2014-07-07
  • 打赏
  • 举报
回复
1)用exec 动态去拼接执行 2)拆分到临时表去 join 从安全和性能的角度建议用拆分到临时表的方法
發糞塗牆 2014-07-07
  • 打赏
  • 举报
回复
把输入拆成一个表再IN
--1.函数
if exists(select * from sys.objects where name = 'f_splitSTR' and type = 'tf')
   drop function dbo.f_splitSTR
go
 
create function dbo.f_splitSTR
(
    @s varchar(8000),     --要分拆的字符串
    @split varchar(10)    --分隔字符
) 
returns @re table(                      --要返回的临时表
                     col varchar(1000)  --临时表中的列 
                 )
as
begin   
  declare @len int
   
  set @len = LEN(@split)      --分隔符不一定就是一个字符,可能是2个字符
   
  while CHARINDEX(@split,@s) >0
  begin
    insert into @re 
    values(left(@s,charindex(@split,@s) - 1))
     
    set @s = STUFF(@s,1,charindex(@split,@s) - 1 + @len ,'')    --覆盖:字符串以及分隔符
  end
   
  insert into @re values(@s)
   
  return   --返回临时表
end
go  
 
 
 
declare @res varchar(100)
set @res='1 2 3 4 5';
 
set @res = REPLACE(@res,' ',',')
 
select * from dbo.f_splitSTR(@res,',') t 
/*
col
1
2
3
4
5
*/

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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