Oracle删除重复的字符

时间:2014-10-07 10:37:40

标签: sql oracle plsql

为了实现密码复杂性,我需要一个可以删除重复字符的函数(为了生成符合密码复杂性要求的密码)。因此,不再允许像weeeeee1这样的字符串,因为重复了e。我需要一个函数,它将返回we1,其中重复的字符已被删除。必须使用Oracle PL / SQL或直接SQL。

我找到了Oracle SQL -- remove partial duplicate from string,但这对我的weeeeee1测试用例不起作用,因为它只替换了一次迭代,因此返回weee1。

我不是要测试没有重复的字符。我正在尝试将重复的字符串更改为非重复的字符串。

3 个答案:

答案 0 :(得分:6)

我认为您可以使用regexp_replace实现目标。或者我错过了什么?

select regexp_replace(:password, '(.)\1+','\1') 
  from dual;

以下是一个例子:

with t as (select 'weeee1' password from dual
           union select 'wwwwweeeee11111' from dual
           union select 'we1' from dual)

select regexp_replace(t.password, '(.)\1+','\1') 
  from t;

产:

REGEXP_REPLACE(T.PASSWORD,'(.)\1+','\1')
we1
we1
we1

答案 1 :(得分:1)

试试这个:

select regexp_replace('weeeeee1', '(.)\1+', '\1') val from dual

VAL
---
we1

答案 2 :(得分:0)

也许,

  1. 使用返回值(weee1)再次检查并替换

  2. 取出单词的每个字母并检查是否有超过1个存在的整个单词。