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