如何比较SQL Server 2012中存储csv值的这两列?我想返回常见的值。
column1 - 2,3,4,5
column2 - 4,5,6
查询是否应返回4,5或至少一个布尔值,无论它们是否具有相同的值。
我尝试使用xquery,但无法正常工作
答案 0 :(得分:0)
解决方案很明确。您需要拆分值,然后使用一种技术来匹配相同的值。
为了分割值,我正在使用将它们转换为XML,然后使用nodes()
。这是一项旧技术,适用于所有SQL Server版本。无论如何,我建议(如果无法升级到SQL Server 2016 +并使用STRING_SPLIT)来检查并尝试实现this SQL CLR功能包-这将使编码更加容易和清晰。 / p>
DECLARE @column1 VARCHAR(MAX)
,@column2 VARCHAR(MAX);
SELECT @column1 = '2,3,4,5'
,@column2 = '4,5,6';
WITH CTE([column1], [column2])
AS
(
-- this can be replaced with your actual query selecting data from the table
SELECT CAST(N'<r><![CDATA[' + REPLACE(@column1, ',', ']]></r><r><![CDATA[') + ']]></r>' AS XML)
,CAST(N'<r><![CDATA[' + REPLACE(@column2, ',', ']]></r><r><![CDATA[') + ']]></r>' AS XML)
)
SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)'))) AS Code
FROM CTE
CROSS APPLY [column1].nodes('//r') Tbl(Col)
INTERSECT
SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)'))) AS Code
FROM CTE
CROSS APPLY [column2].nodes('//r') Tbl(Col);
我正在使用INTERSECT
,但是您也可以使用INNER JOIN
。