Sql 每行正则表达式的匹配计数
我使用下面的查询来获取具有我的正则表达式模式的内容行。但我不知道每一行的模式命中了多少次。在Postgres中获得每行匹配计数的最佳方法是什么 例如,如果一行的内容是'abcdefabcgh',我的正则表达式是'abc',我想要2,因为'abcdefabcgh'有两个'abc'Sql 每行正则表达式的匹配计数,sql,regex,postgresql,pattern-matching,Sql,Regex,Postgresql,Pattern Matching,我使用下面的查询来获取具有我的正则表达式模式的内容行。但我不知道每一行的模式命中了多少次。在Postgres中获得每行匹配计数的最佳方法是什么 例如,如果一行的内容是'abcdefabcgh',我的正则表达式是'abc',我想要2,因为'abcdefabcgh'有两个'abc' SELECT content FROM table1 WHERE content ~ 'my_regex_pattern' 或者,如何获取匹配项超过特定数字的行。例如,只需给我abc超过4次的记录。当然,您可以使用re
SELECT content
FROM table1
WHERE content ~ 'my_regex_pattern'
或者,如何获取匹配项超过特定数字的行。例如,只需给我abc超过4次的记录。当然,您可以使用
regexp\u matches()
。或者更好。若要应用于整个表格,请使用横向连接(需要Postgres 9.3+):
对于问题示例中的简单模式,您还可以:
SELECT content, (length(content) - length(replace(content, 'abc', ''))) / length('abc')
FROM table1
WHERE content LIKE '%abc%';
通常更快,因为正则表达式函数的成本很高。也适用于旧版本。它的可能重复肯定是SO问题的重复,但这可能更相关:我认为regexp_匹配而不是~解决了我的问题。
SELECT content, (length(content) - length(replace(content, 'abc', ''))) / length('abc')
FROM table1
WHERE content LIKE '%abc%';