我们想做以下事情:
SELECT * FROM table WHERE char_length(text) >= 15 AND char_length(text) <= 100
但是,我们希望它只返回匹配此查询但不带主题标签的“文本”列。那是:
如果 text = 'hello how are you'
将匹配
但
text = 'hello #how #are you'
将不匹配(因为我们要过滤掉主题标签并且 char_length('hello you')
太短)。
最佳答案
您可以从文本中删除主题标签并检查剩余的字符串是否在您想要的长度范围内:
with t as (select 'this is some text' as txt union all
select 'this is #hashed text - loong' union all
select 'too short #despite #many #hashtags')
select * from t
where length(regexp_replace(txt, '#[a-z]+ *', '', 'g')) between 15 and 100
你可能想用正则表达式 #[a-z]+ *
来识别你的标签。请注意,'g'
使 regexp_replace
替换正则表达式的 所有 出现,而不仅仅是第一个,参见 PostgreSQL docs .
关于sql - Postgres 选择非正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48729907/