用sql表值函数实现字符串的位置调换

如:123456 输出的结果为456123;1230456 输出的结果为4560123

创建

create function [dbo].weizhi
(@scode varchar(10))
Returns varchar(10)
As
Begin
Declare @len int
Declare @t varchar(10)
select @len=len(@scode)
set @t=''
if @len%2=1
begin
set @t=SUBSTRING(@scode,@len/2+2,@len/2)+SUBSTRING(@scode,@len/2+1,1)+SUBSTRING(@scode,1,@len/2)
end
else if @len%2=0
begin
set @t=SUBSTRING(@scode,@len/2+1,@len/2)+SUBSTRING(@scode,1,@len/2)
end
return @t
end

执行测试

select dbo.weizhi('1230456')
select dbo.weizhi('123456')追问

嗯,这个方法我已经做出来了、现在的要求是不要判断用一条语句实现所有可能输入的参数。

追答alter function [dbo].weizhi
(@scode varchar(10))
Returns varchar(10)
As
Begin
Declare @len int
Declare @t varchar(10)
select @len=len(@scode)
set @t=''
select @t=case when @len%2=1 
then SUBSTRING(@scode,@len/2+2,@len/2)+SUBSTRING(@scode,@len/2+1,1)+SUBSTRING(@scode,1,@len/2)
else SUBSTRING(@scode,@len/2+1,@len/2)+SUBSTRING(@scode,1,@len/2) end
return @t
end


那就把if换成case when

追问

诶呀,好机智呐。
恩人呐,太感谢了!!

追答

求采纳

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-08
后三位前置?还是固定内容调整,如果是后三位前置直接用字符串函数就能做到right(string,3)+left(string,len(string)-3)追问

不是这样的。估计您没看清楚我的问题,如果输入的参数是:1230456 输出:4560123 。重点在于中间的那个字符。

追答

是在中间来互换么?那用len取了字符的长度除2再来组后就可以了,同样用right和left这两个函数

追问

嗯,谢谢您为我解答。我已经做出来了

追答

互相学习

第2个回答  2014-07-08
没规律,不好做的。。追问

规律还是有的。就是让前后两段的字符互换位置

相似回答