mssql bcd字符串操作-交换字符串中的2位数字
我似乎不知道如何在一个字符串中互相交换两个varchar比特。例如: 字符串:680664204683587 varchar 完:8660460240865378 它应该是这样工作的:6806642004683587,然后像866046一样翻转它们 sql中是否有执行bcd字符串操作的函数mssql bcd字符串操作-交换字符串中的2位数字,sql,sql-server,tsql,Sql,Sql Server,Tsql,我似乎不知道如何在一个字符串中互相交换两个varchar比特。例如: 字符串:680664204683587 varchar 完:8660460240865378 它应该是这样工作的:6806642004683587,然后像866046一样翻转它们 sql中是否有执行bcd字符串操作的函数 谢谢您可以将其封装在函数中,但以下是基本代码: DECLARE @VAL NVARCHAR(16) = N'6806642004683587'; DECLARE @OUT NVARCHAR(16); ;WI
谢谢您可以将其封装在函数中,但以下是基本代码:
DECLARE @VAL NVARCHAR(16) = N'6806642004683587';
DECLARE @OUT NVARCHAR(16);
;WITH A(N, S) AS (
SELECT 1 N, SUBSTRING(@VAL, 1, 2) S
UNION ALL
SELECT N+2 N, SUBSTRING(@VAL, N+2, 2) S FROM A WHERE N+2 < LEN(@VAL)
)
SELECT @OUT = COALESCE(@OUT + '', '') + REVERSE(S) FROM A;
SELECT @VAL, @OUT;
---------------- ----------------
6806642004683587 8660460240865378
您可以将其封装在函数中,但以下是基本代码:
DECLARE @VAL NVARCHAR(16) = N'6806642004683587';
DECLARE @OUT NVARCHAR(16);
;WITH A(N, S) AS (
SELECT 1 N, SUBSTRING(@VAL, 1, 2) S
UNION ALL
SELECT N+2 N, SUBSTRING(@VAL, N+2, 2) S FROM A WHERE N+2 < LEN(@VAL)
)
SELECT @OUT = COALESCE(@OUT + '', '') + REVERSE(S) FROM A;
SELECT @VAL, @OUT;
---------------- ----------------
6806642004683587 8660460240865378
可以使用while循环
质疑
结果
如果字符串len是奇数,并且还需要连接最后一个字符。然后将while@len>=@i更改为while@len>=@i-1。可以使用while循环
质疑
结果
如果字符串len是奇数,并且还需要连接最后一个字符。然后将while@len>=@i更改为while@len>=@i-1。您可以使用数字表,不需要任何循环,也可以
;with cte
as
(
select
reverse(substring(@nn,n,2)) as n
from numbers
where n<=len(@nn)
and (n%2=0 or n=1)
)
select
replace(stuff( (SELECT ','+n
FROm cte
FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1,''),',','')
您可以使用数字表,不需要任何循环,也可以
;with cte
as
(
select
reverse(substring(@nn,n,2)) as n
from numbers
where n<=len(@nn)
and (n%2=0 or n=1)
)
select
replace(stuff( (SELECT ','+n
FROm cte
FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1,''),',','')