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

时间:2017-07-03 11:30:53

标签: sql regex vertica

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

ABC;ABC;XYZ;PQR;ABC;PQR

并且要求将此转换为类似的东西 -

ABC;XYZ;PQR

意思是正则表达式应保留所有唯一单词并删除重复项。任何人都可以帮我这个。这可能在SQL中吗?

2 个答案:

答案 0 :(得分:1)

HP Vertica uses PCRE regex开始,以下正则表达式(使用null替换)应该起作用:

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

请参阅demo

下面简要说明:

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

答案 1 :(得分:-1)

使用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