用于删除 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 结尾
我有一个像这样的字符串 -
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 结尾