0
我想做一個函數來檢查字符串的每個字符。 例如,讓我們說一句「pppppoooossssttt」,在這種情況下,如果相同的字符重複2次以上,該函數將返回警告。這裏'p'重複5次。所以這個函數會返回一個警告信息。通過pgsql檢查字符串中的每個字符函數
我想做一個函數來檢查字符串的每個字符。 例如,讓我們說一句「pppppoooossssttt」,在這種情況下,如果相同的字符重複2次以上,該函數將返回警告。這裏'p'重複5次。所以這個函數會返回一個警告信息。通過pgsql檢查字符串中的每個字符函數
如果你能夠在你的設置上安裝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;
好的,你到現在爲止做了什麼? – Houari
到現在爲止,我已經將字符串拆分爲單個字符,但無法重複比較每個字符。 我的查詢是:選擇regexp_split_to_array(statename,'')從statecode狀態代碼= $ 1狀態代碼狀態碼var_one; –
好的,你可以通過循環訪問數組,並返回一個警告消息,如果最後3個字符是相同的... – Houari