2014-12-30 91 views
0

我想做一個函數來檢查字符串的每個字符。 例如,讓我們說一句「pppppoooossssttt」,在這種情況下,如果相同的字符重複2次以上,該函數將返回警告。這裏'p'重複5次。所以這個函數會返回一個警告信息。通過pgsql檢查字符串中的每個字符函數

+1

好的,你到現在爲止做了什麼? – Houari

+0

到現在爲止,我已經將字符串拆分爲單個字符,但無法重複比較每個字符。 我的查詢是:選擇regexp_split_to_array(statename,'')從statecode狀態代碼= $ 1狀態代碼狀態碼var_one; –

+0

好的,你可以通過循環訪問數組,並返回一個警告消息,如果最後3個字符是相同的... – Houari

回答

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; 
相關問題