通过pgsql函数检查字符串中的每个字符

时间:2014-12-30 08:11:55

标签: function postgresql

我想创建一个函数来检查字符串的每个字符。 例如,让我们来一个单词" pppppoooossssttt",在这种情况下,如果相同的字符重复超过2次,该函数将返回警告。这里' p'重复5次。因此该函数将返回一条警告消息。

1 个答案:

答案 0 :(得分:0)

如果你能够在你的设置上安装plpython,这就是我要做的。然后,您可以简单地将此测试放在标准SQL函数的“WHERE”子句中。它是不可变的,所以它只会被调用一次,它总是返回True,所以它不会影响SQL查询的结果。 Postgres有一些相当不稳定的python实现,但他们或EnterpriseDB在最新版本中清理了一些东西。

CREATE OR REPLACE FUNCTION two_or_less(v text)
RETURNS BOOLEAN AS $$
    #If the string is two characters
    #or less, we can quit now.
    ct = len(v)
    if ct < 3: 
        return True

    import plpy
    warned = set()

    a,b,c = v[:3]
    for d in v[2:]:
        if a == b == c:
            if a not in warned:
                warned.add(a)
                plpy.warning('The character %r is repeated more than twice in a row.' % a)
        a,b,c = b,c,d
    return True

$$ LANGUAGE 'plpython3u' IMMUTABLE;