mssql bcd字符串操作-交换字符串中的2位数字

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

我似乎不知道如何在一个字符串中互相交换两个varchar比特。例如:

字符串:680664204683587 varchar 完:8660460240865378

它应该是这样工作的:6806642004683587,然后像866046一样翻转它们

sql中是否有执行bcd字符串操作的函数


谢谢

您可以将其封装在函数中,但以下是基本代码:

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,''),',','')