解决方案很明确。您需要拆分这些值,然后使用一种技术来匹配相同的值。
为了拆分值,我将它们转换为 XML,然后使用 nodes()。这是适用于所有 SQL Server 版本的旧技术。无论如何,我建议(如果不能升级到 SQL Server 2016 + 并使用STRING_SPLIT)检查并尝试实现this SQL CLR 函数包 - 它将使编码更容易和更清晰。
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。