一条简单的SQL循环语句
表T
IDN
1A
2B
3C
4D
怎么写一个SQL函数传入的参数为“3124”不固定的返回的结果是"CABD"
不使用游标怎么处理,使用游标回复不给分,谢谢。
[解决办法]
- SQL code
declare @var varchar(10)set @var='3124'-----拆分字符with cte as ( select * from ( select left(@var,1) as number ,SUBSTRING(@var,2,LEN(@var)-1) as v_temp )A union all select LEFT(v_temp,1),SUBSTRING(v_temp,2,LEN(v_temp)-1) from cte where LEN(v_temp)>0 )select number, b.N from cte a--关联查询维护表left join( select 1 as ID,'A' as N union all select 2,'B' union all select 3,'C' union all select 4,'D' union all select 5,'E' union all select 6,'F' union all select 7,'G' union all select 8,'H' union all select 9,'I') b on a.number=b.id /*number N------ ----3 C1 A2 B4 D(4 row(s) affected)*/
[解决办法]
- SQL code
declare @T table (ID int,N varchar(10))insert into @Tselect 1,'A' union allselect 2,'B' union allselect 3,'C' union allselect 4,'D'declare @s varchar(10) set @s='3124'select N from @T order by charindex(ltrim(ID),@s)/*N----------CABD*/
[解决办法]
- SQL code
if object_id('[T]') is not null drop table [T]gocreate table [T]([ID] int,[N] varchar(1))insert [T]select 1,'A' union allselect 2,'B' union allselect 3,'C' union allselect 4,'D'godeclare @s varchar(50)set @s='3124'update t set @s=replace(@s,ltrim(id),N)select @s as result/**result--------------------------------------------------CABD(1 行受影响)**/