[英]SQL Server 2019 query returns all null values when trying to separate a single column into multiples columns of data
我有一个使用/
作为分隔符的数据表。 我正在尝试将单列数据分成三列。
我的查询返回了正确的行数,但所有三列都是 NULL。 是否有任何我错过的明显内容跳出页面?
以下是数据在PGroup
列中的存储方式:
Steve/Mouse/Vitamin
Matt/Cat/Soda
Shelly/Dog/Bread
我希望返回 3 个单独的列: Name, Pet, Food
DECLARE @delimiter VARCHAR(50)
SET @delimiter='/'
;WITH CTE AS
(
SELECT
CAST('' + REPLACE([PGroup], @delimiter, '') + '' AS XML) AS [PXML]
FROM
xx123
)
SELECT
[PXML].value('/M[1]', 'varchar(50)') As [Name],
[PXML].value('/M[2]', 'varchar(50)') As [Pet],
[PXML].value('/M[3]', 'varchar(50)') As [Food]
FROM
CTE
请尝试以下解决方案。
值得注意的点:
text()
。SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(1000));
INSERT INTO @tbl (tokens) VALUES
('Steve/Mouse/Vitamin'),
('Matt/Cat/Soda'),
('Shelly/Dog/Bread');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = '/';
SELECT ID
, c.value('(/root/r[1]/text())[1]', 'varchar(50)') As [Name]
, c.value('(/root/r[2]/text())[1]', 'varchar(50)') As [Pet]
, c.value('(/root/r[3]/text())[1]', 'varchar(50)') As [Food]
FROM @tbl
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' +
REPLACE(tokens, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML)) AS t(c);
Output
+----+--------+-------+---------+
| ID | Name | Pet | Food |
+----+--------+-------+---------+
| 1 | Steve | Mouse | Vitamin |
| 2 | Matt | Cat | Soda |
| 3 | Shelly | Dog | Bread |
+----+--------+-------+---------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.