gpt4 book ai didi

sql - 查找在逗号分隔值内包含相同值的行

转载 作者:行者123 更新时间:2023-12-03 00:18:43 24 4
gpt4 key购买 nike

我有一个 varchar 列,由另一个我无法控制的进程填充,其中填充了逗号分隔的值。

现在我需要找到该列的一部分存在于另一行的同一列中的所有行

示例

declare @table table (value varchar(50))
insert into @table values ('NB,BD,FR'), ('BD,GK'), ('SL,SR')

select * from @table

所以表包含

value   
-----
NB,BD,FR
BD,GK
SL,SR

从上面的例子中我想得到

value   
-----
NB,BD,FR
BD,GK

因为两行中都存在一个值(在本例中是 BD 但可以是任何值)

这可以用sql来完成吗?

最佳答案

您可以使用笨重的 XML 操作将逗号分隔值转换为行:

DECLARE @table TABLE (value VARCHAR(50));
INSERT INTO @table VALUES
('NB,BD,FR'),
('BD,GK'),
('SL,SR');

WITH cte AS (
SELECT value, node.value('.', 'varchar(10)') AS substr
FROM @table
CROSS APPLY (SELECT CAST('<x>' + REPLACE(value, ',', '</x>,<x>') + '</x>' AS XML)) AS x(doc)
CROSS APPLY doc.nodes('/x') AS n(node)
)
-- use your favorite technique to find the duplicate
SELECT value
FROM cte AS m
WHERE EXISTS (
SELECT 1
FROM cte AS x
WHERE value <> m.value AND substr = m.substr
)

CAST(... AS XML) 部分假定您的数据不包含在 XML 中具有特殊含义的字符。 nodes方法会将一行转换为多行,其余的很简单。

关于sql - 查找在逗号分隔值内包含相同值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54440071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com