今天有同事咨询有关数据检索方面的问题,是这样的,需要检索出一张表的字段值的内容全部是数字并且长度为11的记录, 开始想了想,长度为11这很好控制,用个 char_length 函数就行,但是要判断每一位都为数字,就不好判断了。好在PG里提供正则表达式,可以非常灵活地解决这个问题,以下为详细步骤。
测试场景
一张测试表,里面有少量数据
1 |
skytf=> select * From test_27 order by id; |
如何过滤出 name 字段长度为11,且 name 字段内容全为数字的记录呢?
看下面这个查询,查询 name 字段长度为11位,并且内容全为数字的记录。
1 |
skytf=> select * From test_27 where name ~ '^[0-9]{11}'; |
备注:上面检索条件中的大括号,表示检索范围。
正则表达式的基础知识
正则表达式匹配操作符
正则表达式原子
正则表达式量词
正则表达式约束
上面只列出正则表达式的一些基础知识,正则表达式的检索能力相当强大,特别是对于类型为 Text 类型,并且存储的是XML数据时,正则表达式的优势将更能发挥作用。关于更详细的信息可以参考文档http://www.postgresql.org/docs/9.0/static/functions-matching.html
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/236383.html