我有一张桌子:
id | string
1 | a,b,c,d,a,b
2 | a,a,c,d,a,b
3 | a,b,c,d
我想查看一封信' a'使用正则表达式在字符串中重复。我该怎么做?
我尝试
select * from table where string ~ 'a[^a]*'
但它不起作用。
预期结果:
id | string | repeat_a
1 | a,b,c,d,a,b | t
2 | a,a,c,d,a,b | t
3 | a,b,c,d | f
答案 0 :(得分:2)
一种方法是将输入字符串与该字符串进行比较,并删除所有出现的字母'a'
。匹配的记录的特征在于被替换字符串的长度比原始输入短2个或更多字符。
SELECT * FROM table
WHERE char_length(string) > char_length(replace(string, 'a', '')) + 1
答案 1 :(得分:1)
如果您的字母a是以逗号分隔的值列表中的值,则扫描字母a的出现可能是不够的,因为该字母可能包含在值中而不是“该”值。如果是这种情况,你可以做
SELECT string, val, count(*)
FROM table
JOIN LATERAL string_to_array(string, ',') val ON TRUE
WHERE val = 'a' -- remove this to see all the repeating values
GROUP BY val, string
HAVING COUNT(*) > 1;