Ваша собственная попытка вызова STRING_SPLIT()
доказательств того, что вы используете v2016 +. Таким образом, вы можете вызвать JSON для вашего спасения:
(Кредит Джону Каппеллетти для макета )
Declare @YourTable table (Bookingnumber varchar(50),paymentrow varchar(max) )
Insert Into @YourTable values
('12-3-56789012-3','/TYPE/BOOKING/IBAN/NL12BANK0003456789/BIC/BANKNL2A/NAME/Mr. A. Someguy/CODE/Codenumber 12345678/REF/NOTPROVIDED/LINE/ABCD EFG 234567890 1234 ETC')
,('98-7-65431234-0','/TYPE/BOOKING/IBAN/NL34BANK000123456/BIC/BANKNL2U/NAME/Mr. A. Dinges/CODE/98765432/REF/NOTPROVIDED');
SELECT *
FROM @YourTable t
CROSS APPLY OPENJSON(CONCAT('[{',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
t.paymentrow,'/TYPE/','"Type":"')
,'/IBAN/','","IBAN":"')
,'/BIC/','","BIC":"')
,'/NAME/','","Name":"')
,'/CODE/','","Code":"')
,'/REF/','","Ref":"')
,'/LINE/','","Line":"'),'"}]'))
WITH([Type] NVARCHAR(100)
,[IBAN] NVARCHAR(100)
,[BIC] NVARCHAR(100)
,[Name] NVARCHAR(250)
,[Code] NVARCHAR(100)
,[Ref] NVARCHAR(100)
,[Line] NVARCHAR(500)) A;
Мы используем некоторые замены, чтобы преобразовать вашу строку в такойJSON
[{"Type":"BOOKING",
"IBAN":"NL12BANK0003456789",
"BIC":"BANKNL2A",
"Name":"Mr. A. Someguy",
"Code":"Codenumber 12345678",
"Ref":"NOTPROVIDED",
"Line":"ABCD EFG 234567890 1234 ETC"}]
Предложение WITH
сделает поворот неявно.
ОБНОВЛЕНИЕ Если это безопасно с позиции
При фиксированном шаблоне ввода это легче
SELECT *
FROM @YourTable t
CROSS APPLY OPENJSON(CONCAT('[["',REPLACE(STUFF(t.paymentrow,1,1,''),'/','","'),'"]]'))
WITH([Type] NVARCHAR(100) '$[1]'
,[IBAN] NVARCHAR(100) '$[3]'
,[BIC] NVARCHAR(100) '$[5]'
,[Name] NVARCHAR(250) '$[7]'
,[Code] NVARCHAR(100) '$[9]'
,[Ref] NVARCHAR(100) '$[11]'
,[Line] NVARCHAR(500) '$[13]') A;
Промежуточный JSON-массив выглядит так:
["TYPE","BOOKING","IBAN","NL12BANK0003456789","BIC","BANKNL2A","NAME","Mr. A. Someguy","CODE","Codenumber 12345678","REF","NOTPROVIDED","LINE","ABCD EFG 234567890 1234 ETC"]