Postgresql:检查字符串是否重复

时间:2016-05-11 12:31:36

标签: postgresql

我有一张桌子:

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

2 个答案:

答案 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;