有没有一种方法可以比较SQL中的逗号分隔字段?

时间:2019-11-29 21:09:07

标签: sql

我有一些数据,以这种方式映射(用逗号分隔)

Name      Items
Andrew    apples, bananas, oranges
Jane      bananas, apples
Mary      oranges, apples

我想比较每个名字的果实,以便:

当用户输入两个名称时,我可以确定Andrew的水果和Jane的水果有什么区别。这可以显示在列出两个组都不存在的水果的字段中,并显示拥有该(不同)水果的用户。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

MS Sql Server(+2017)的解决方案。 它确实使用STRING_SPLIT来拆分字符串。

然后使用EXCEPT删除相交的项目。
导致只有名字具有的项。

DECLARE @Name1 NVARCHAR(30);
DECLARE @Name2 NVARCHAR(30);

SET @Name1 = 'Mary';
SET @Name2 = 'Jane';

SELECT DISTINCT LTRIM(spl.value) AS Item
FROM TestTable t
CROSS APPLY STRING_SPLIT(t.Items, ',') spl
WHERE Name = @Name1
EXCEPT
SELECT DISTINCT LTRIM(spl.value) AS Item
FROM TestTable t
CROSS APPLY STRING_SPLIT(t.Items, ',') spl
WHERE Name = @Name2
ORDER BY Item;

使用此示例数据时:

CREATE TABLE TestTable
(
  Name NVARCHAR(30) PRIMARY KEY,
  Items NVARCHAR(300) NOT NULL
);
INSERT INTO TestTable (Name, Items) VALUES
('Andrew', 'apples, bananas, oranges'),
('Jane', 'bananas, apples'),
('Mary', 'oranges, apples');

它返回:

Item
--------------
oranges