PostgreSQL中如何让REGEXP_MATCHES返回唯一正则匹配结果?
解决PostgreSQL提取唯一哈希标签的问题
嘿,这个问题其实很常见——REGEXP_MATCHES的'g'标志会返回所有匹配项,包括重复的,所以咱们只需要加个去重步骤就能搞定。给你两种实用的方案:
方案1:直接返回去重后的哈希标签行
你可以用DISTINCT关键字对REGEXP_MATCHES的结果去重,这样就能得到每个唯一的哈希标签:
SELECT DISTINCT hashtag FROM REGEXP_MATCHES( 'this has #abc and also #def and another #abc and even an #bc', '(#[A-Za-z0-9_]+)', 'g' ) AS matches(hashtag);
执行这个查询后,结果会是:
hashtag --------- #abc #def #bc
方案2:将唯一哈希标签聚合成数组
如果你希望结果是一个包含所有唯一标签的数组,可以用ARRAY_AGG配合DISTINCT,还能顺便排序:
SELECT ARRAY_AGG(DISTINCT hashtag ORDER BY hashtag) AS unique_hashtags FROM REGEXP_MATCHES( 'this has #abc and also #def and another #abc and even an #bc', '(#[A-Za-z0-9_]+)', 'g' ) AS matches(hashtag);
这个查询会返回:
unique_hashtags ----------------- {#abc,#bc,#def}
补充说明
你的正则表达式'(#[A-Za-z0-9_]+)'是没问题的,符合大多数平台哈希标签的规则(仅包含字母、数字和下划线,以#开头)。如果需要支持其他字符(比如连字符),只需要把正则调整为'(#[A-Za-z0-9_-]+)'即可。
内容的提问来源于stack exchange,提问作者Mike M
相关产品推荐
相关产品推荐

