gpt4 book ai didi

sql - 使用 SQL 从列单元格中删除重复的单词

转载 作者:行者123 更新时间:2023-12-03 00:10:21 25 4
gpt4 key购买 nike

从列单元格中删除重复的单词,例如:

数据列这是单个字段:'BLACKHEATH 0AA BLACKHEATH COLCHESTER CO2 0AA '

但我想要这样,“BLACKHEATH”应该只出现一次,如果发现任何其他条目,则应将其删除

BLACKHEATH COLCHESTER CO2 0AA

我可以通过代码做到这一点,但我不知道如何通过 SQL Server 中的 SQL 删除重复的单词。我被指示通过 SQL 来执行此操作。任何帮助将不胜感激。

最佳答案

如果顺序不重要,你可以很容易地做到这一点:

DECLARE @string VARCHAR(100) = 'BLACKHEATH 0AA  BLACKHEATH COLCHESTER CO2 0AA';

SELECT @string AS Source
, LTRIM((
SELECT DISTINCT ' ' + column1 AS [text()]
FROM dbo.SplitString(@string, ' ')
FOR XML PATH('')
)) AS UniqueWords;

这里的想法是什么?

  1. dbo.SplitString 函数根据分隔符将字符串拆分为行(在您的情况下为空格)。请参阅this article找到最适合您需求的 SplitString 函数。
  2. DISTINCT 关键字已删除重复内容
  3. 使用 FOR XML PATH('') 我们将它们重新连接在一起。

结果:

╔═══════════════════════════════════════════════╦═══════════════════════════════╗
║ Source ║ UniqueWords ║
╠═══════════════════════════════════════════════╬═══════════════════════════════╣
║ BLACKHEATH 0AA BLACKHEATH COLCHESTER CO2 0AA ║ 0AA BLACKHEATH CO2 COLCHESTER ║
╚═══════════════════════════════════════════════╩═══════════════════════════════╝

如果您需要保持顺序,则必须创建一个函数,以原始顺序存储您的术语(可能使用 ROW_NUMBER() )并为每个单独的术语提供顺序(以删除重复项),然后您可以计算在哪里每个词都需要。我没有费心创建它,但它应该为您的字符串输出这样的结果:

╔═══════════╦═══════════╦════════════╗
║ WordOrder ║ TermOrder ║ Term ║
╠═══════════╬═══════════╬════════════╣
║ 1 ║ 1 ║ BLACKHEATH ║
║ 2 ║ 1 ║ 0AA ║
║ 3 ║ 2 ║ BLACKHEATH ║
║ 4 ║ 1 ║ COLCHESTER ║
║ 5 ║ 1 ║ CO2 ║
║ 6 ║ 2 ║ 0AA ║
╚═══════════╩═══════════╩════════════╝

可以在这样的查询中重用(@Splitted 是上面的表格):

SELECT @string AS Source
, LTRIM((
SELECT ' ' + Term AS [text()]
FROM @Splitted
WHERE TermOrder = 1
ORDER BY WordOrder
FOR XML PATH('')
)) AS UniqueWords;

它输出这个字符串:

╔═══════════════════════════════════════════════╦═══════════════════════════════╗
║ Source ║ UniqueWords ║
╠═══════════════════════════════════════════════╬═══════════════════════════════╣
║ BLACKHEATH 0AA BLACKHEATH COLCHESTER CO2 0AA ║ BLACKHEATH 0AA COLCHESTER CO2 ║
╚═══════════════════════════════════════════════╩═══════════════════════════════╝

附注为什么你被指示在 SQL 中执行此操作? SQL Server 不能很好地处理文本数据,因此我建议在代码中执行此操作,因为它可能会影响您的性能。

关于sql - 使用 SQL 从列单元格中删除重复的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239891/

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