这种SQL语句这么写?
动态选择的一组字符串
如:字符串=‘a,b,c'
需要查出表中栏目列中等于这些字符串号的记录
表A
序号 栏目
1 a
2 b
3 c
4 d
5 e
6 f
显示结果:
序号 栏目
1 a
2 b
3 c
------解决方案--------------------1.先写个表值函数
create function [dbo].[f_SplitToNvarchar]
(
@SourceSql nvarchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a nvarchar(max))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end
2.然后
select * from A where 栏目 in (select * from f_SplitToNvarchar('a,b,c',',')
------解决方案--------------------查询用到的函数 f_split
SQL code
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[f_split](@c varchar(5000),@split varchar(2))
returns @t table(col varchar(5000))
as
begin
declare @tmpstr varchar
declare @index int
set @index=1;
while(charindex(@split,@c,@index)<>0)
begin
set @tmpstr=substring(@c,charindex(@split,@c,@index),charindex(@split,@c,@index))
if(ascii(@tmpstr)<>163)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c,@index)-1))
set @c = stuff(@c,1,charindex(@split,@c,@index),'')
set @index=1
end
else
begin
set @index=(charindex(@split,@c,@index)+1)
end
end
insert @t(col) values (@c)
return
end