Sql server 如果输出与您的示例相同,则应如此perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解并对其进行反向工程后,它工作得非常好。然后他给我提供了一个基本模板,我可以修改它以获
Sql server 如果输出与您的示例相同,则应如此perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解并对其进行反向工程后,它工作得非常好。然后他给我提供了一个基本模板,我可以修改它以获,sql-server,tsql,Sql Server,Tsql,如果输出与您的示例相同,则应如此perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解并对其进行反向工程后,它工作得非常好。然后他给我提供了一个基本模板,我可以修改它以获得我所需要的准确输出。非常感谢,我将在星期一浏览它,看看它是如何运行的。如果输出与您的示例相同,则应该是perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解
如果输出与您的示例相同,则应如此perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解并对其进行反向工程后,它工作得非常好。然后他给我提供了一个基本模板,我可以修改它以获得我所需要的准确输出。非常感谢,我将在星期一浏览它,看看它是如何运行的。如果输出与您的示例相同,则应该是perfect@JoshuaTyrrell使用基于XML的方法更新了答案。您好@Zhorov,非常感谢您的回复。我的DB管理员成功地将其分解并对其进行反向工程后,它工作得非常好。然后,他能够为我提供一个基本模板,我可以修改该模板以获得所需的准确输出
X1Y45Z1
Y25Z1
X1Y9Z1
X2Z6
declare @tbl table
(
Col1 varchar(100), <-------This Column contains the values I want
)
insert into @tbl
select Col1,
from table1,
where xyz
;with cte as
(
select
Col1,
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(**Col1**,'P', '</x><x>P'),'C', '</x><x>C'),'I', '</x><x>I'),'M', '</x><x>M'),'S', '</x><x>S'),'Q', '</x><x>Q'),'L', '</x><x>L'),'T', '</x><x>T'),'E', '</x><x>E'),'R', '</x><x>R'),'U', '</x><x>U'),'W', '</x><x>W')
**Col1NODES**
from
@tbl
)
, cte2 (Col1, Col1Nodes) as
(
select
Col1,
convert(xml,'<z><x>' + Col1nodes + '</x></z>') **Col1NODES**
from
cte
)
select
Col1,
isnull(Col1Nodes.value('/z[1]/x[2]','varchar(100)'),'-') F1,
isnull(Col1Nodes.value('/z[1]/x[3]','varchar(100)'),'-') F2,
isnull(Col1Nodes.value('/z[1]/x[4]','varchar(100)'),'-') F3
from
cte2
CREATE TABLE Data (
TextData nvarchar(100)
)
INSERT INTO Data
(TextData)
VALUES
('X1Y45Z1'),
('Y25Z1'),
('X1Y9Z1'),
('X2Z6'),
('Z1X6')
SELECT d.TextData, j.*
FROM Data d
CROSS APPLY OPENJSON(
CONCAT(
N'{',
STUFF(REPLACE(REPLACE(REPLACE(d.TextData, N'X', N',"X":'), N'Y', N',"Y":'), N'Z', N',"Z":'), 1, 1, N''),
N'}'
)
) WITH (
X int '$.X',
Y int '$.Y',
Z int '$.Z'
) j
---------------------
TextData X Y Z
---------------------
X1Y45Z1 1 45 1
Y25Z1 25 1
X1Y9Z1 1 9 1
X2Z6 2 6
Z1X6 6 1
SELECT
TextData,
XmlData.value('(/row[name = "X"]/value/text())[1]', 'nvarchar(4)') AS X,
XmlData.value('(/row[name = "Y"]/value/text())[1]', 'nvarchar(4)') AS Y,
XmlData.value('(/row[name = "Z"]/value/text())[1]', 'nvarchar(4)') AS Z
FROM (
SELECT
TextData,
CONVERT(
xml,
CONCAT(
STUFF(REPLACE(REPLACE(REPLACE(d.TextData, N'X', N'</value></row><row><name>X</name><value>'), N'Y', N'</value></row><row><name>Y</name><value>'), N'Z', N'</value></row><row><name>Z</name><value>'), 1, 14, N''),
N'</value></row>'
)
) AS XmlData
FROM Data d
) x