@ sami опубликовал единственное высокопроизводительное решение на основе множеств;это тот, чтобы пойти с.
Однако вы можете обмануть и использовать [ngrams8K]. Это будет очень быстро и с упрощенным кодом. 1 .
DECLARE @string VARCHAR(100) = 'FK741 OCEV';
SELECT NewString =
(
SELECT REVERSE(ng.token)
FROM dbo.ngrams8k(@string,2) AS ng
WHERE ng.position%2=1
ORDER BY ng.position
FOR XML PATH('')
);
Возвраты: KF47 1COVE
Против таблицы:
WITH SampleData AS
(SELECT TOP (10) OldString=STUFF(LEFT(NEWID(),7),5,0,' ') FROM sys.all_columns)
SELECT s.OldString, f.NewString
FROM SampleData AS s
CROSS APPLY
(
SELECT REVERSE(ng.token)
FROM dbo.ngrams8k(s.OldString,2) AS ng
WHERE ng.position%2=1
ORDER BY ng.position
FOR XML PATH('')
) AS f(NewString);
Возвраты:
OldString NewString
---------- ----------
D82E EDE 8DE2E ED
655C E83 56C5E 38
307D 62B 03D76 B2
F485 83A 4F588 A3
80DF ABB 08FDA BB
EC97 EB3 CE79E 3B
7279 DE6 2797D 6E
06A8 35B 608A3 B5
8CBD D1E C8DBD E1
D17B 3A0 1DB73 0A