用于字符串分离的SQL查询
输入: 获取o/p的逻辑:前开括号将为fname,内@和后@将为alias1和Alias2,具体取决于序列顺序用于字符串分离的SQL查询,sql,Sql,输入: 获取o/p的逻辑:前开括号将为fname,内@和后@将为alias1和Alias2,具体取决于序列顺序 Full Name ------------------ ABC (PQR) (ABC) PQR (XYZ) ABC @ PQR ABC @ PQR (XYZ) ABC (PQR) @123 期望输出: FNAME ALIAS1 ALIAS2 ----------------------- ABC PQR PQR ABC XYZ ABC PQ
Full Name
------------------
ABC (PQR)
(ABC) PQR (XYZ)
ABC @ PQR
ABC @ PQR (XYZ)
ABC (PQR) @123
期望输出:
FNAME ALIAS1 ALIAS2
-----------------------
ABC PQR
PQR ABC XYZ
ABC PQR
ABC PQR XYZ
ABC PQR 123
请用这样的东西-
;WITH CTE1 AS
(
SELECT REPLACE(REPLACE(REPLACE([Full Name],'(',''),')',''),'@','') [Full Name] FROM Names
)
,CTE AS
(
SELECT [Full Name],
CAST(('<r><n>' + REPLACE([Full Name],' ', '</n><n>') + '</n></r>') AS XML) X
FROM CTE1
)
SELECT
FNAME, CASE WHEN ALIAS1 = '' THEN ALIAS2 ELSE ALIAS1 END ALIAS1,
CASE WHEN ALIAS1 = '' THEN '' ELSE ALIAS2 END ALIAS2
FROM
(
SELECT
i.value('n[1]','VARCHAR(50)') AS FNAME,
ISNULL(i.value('n[2]','VARCHAR(50)'),'') AS ALIAS1,
ISNULL(i.value('n[3]','VARCHAR(50)'),'') AS ALIAS2
FROM CTE c
CROSS APPLY c.X.nodes('/r') x(i)
)z
在格式化代码之后,我仍然不知道您想要什么。请阅读并提供足够的上下文来帮助您。。所以,不要为你写你的问题,公布你得到了什么,不同之处以及你想要什么。有人能有三个以上的部分吗?例如:ABC QPR@DEF TEY。我删除了不兼容的数据库标记。请用您真正使用的数据库标记您的问题。如果您在拆分字符串后,请在此处查看@GordonLinoff的答案:这将使此问题与您使用的产品重复?博士后?神谕SQL只是一种查询语言,不是特定数据库产品的名称。输出不正确。。请根据您的陈述查看问题的答案,了解以下数据->ABC PQR,ABC如何成为第一名。你的要求不清楚,因为ABC是以前的
/*------------------------
OUTPUT
------------------------*/
FNAME ALIAS1 ALIAS2
---------------------------- --------- --------------------------------------------------
ABC PQR
ABC PQR XYZ
ABC PQR
ABC PQR
ABC PQR 123
(5 row(s) affected)