求PostgreSQL过滤查询:排除description为'to populate+fieldname'的记录
PostgreSQL 查询:过滤符合特定格式的记录
需求:从表中过滤掉description字段符合“to populate + fieldname”格式的记录(不区分大小写、忽略空格/下划线等格式差异),仅保留不符合该格式的记录。
正确的SQL语句
SELECT fieldname, description FROM your_table_name WHERE NOT ( regexp_replace(lower(description), '[^a-z0-9]', '', 'g') = regexp_replace(lower(concat('to populate ', fieldname)), '[^a-z0-9]', '', 'g') );
语句说明
- 统一大小写:用
lower()把description和拼接后的目标字符串都转为小写,消除大小写差异; - 消除格式差异:用
regexp_replace(..., '[^a-z0-9]', '', 'g')去掉所有非字母数字的字符(包括空格、下划线、引号等),确保只比较核心内容; - 过滤逻辑:
NOT关键字反转匹配结果,过滤掉符合“to populate + fieldname”格式的记录,留下不符合的。
测试结果
针对示例数据:
| fieldname | description |
|---|---|
| COST | to populate cost |
| test | To Populate test |
| abc | information about product |
执行查询后得到期望输出:
| fieldname | description |
|---|---|
| abc | information about product |
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

