sql - Postgres 选择非正则表达式查询

标签 sql postgresql

我们想做以下事情:

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/

相关文章:

postgresql - 将没有长独占锁的表中的整型键更改为bigint键

sql - 使用 NOT EXISTS 重写查询的指导

sql - 从具有不同键 Postgres 的同一列复制列中的值

sql - 为什么 2017-01-01 的日期部分周返回 52?

postgresql - 如何计算Postgres的月底?

postgresql - 如何在 PostgreSQL 中调试触发器递归?

C# linq 左连接

sql - SQL 查询中的不同值 - 高级

sql - 从join myself中选择第一行

postgresql - Postgresql 的语音算法