用于删除 SQL 中的重复项的正则表达式

Regex to remove duplicates in SQL

我有一个像这样的字符串 -

ABC;ABC;XYZ;PQR;ABC;PQR

并且要求将其转换为类似这样的东西 -

ABC;XYZ;PQR

意思是正则表达式应该保留所有唯一的单词并删除重复的单词。谁能帮我解决这个问题。这在 SQL 中可行吗?

使用 T-Sql 你可以:

    DECLARE @Strings NVARCHAR(MAX);
    SET @Strings = '';
    SELECT @Strings = CASE WHEN @Strings != '' THEN @Strings + ';' + [String] ELSE [String] END
    FROM (
        SELECT DISTINCT VALUE AS [String] FROM STRING_SPLIT( 'ABC;ABC;XYZ;PQR;ABC;PQR',';')
    ) AS [Strings]; 
    SELECT @Strings

HP Vertica uses PCRE regex 起,以下正则表达式(替换为 null)应该可以工作:

(?<=\;|^)(.+?)\;(?=(.+\;)?(\;|$))

demo

下面是一个简短的解释:

  • (?<=\;|^) 是正后视,意味着要删除的 (.+?)\; 前面应该有分号或字符串开头
  • (.+?)是第一个捕获组
  • (?=) 是一个积极的前瞻,包含:
    • (.+\;)? 任何其他字符(以分号结尾)
    • </code> 第一个捕获组的反向引用</li> <li><code>(\;|$) 必须以分号或 EOL 结尾