正则表达式之一: 用于查询过滤

今天有同事咨询有关数据检索方面的问题,是这样的,需要检索出一张表的字段值的内容全部是数字并且长度为11的记录, 开始想了想,长度为11这很好控制,用个 char_length 函数就行,但是要判断每一位都为数字,就不好判断了。好在PG里提供正则表达式,可以非常灵活地解决这个问题,以下为详细步骤。

测试场景

一张测试表,里面有少量数据

1
2
3
4
5
6
7
8
9
10
skytf=> select * From test_27 order by id;  
id | name
----+-------------
1 | 123
2 | 123A
3 | 12AAA
4 | 123111111
5 | 1234
6 | 12311111111
(6 rows)

如何过滤出 name 字段长度为11,且 name 字段内容全为数字的记录呢?

看下面这个查询,查询 name 字段长度为11位,并且内容全为数字的记录。

1
2
3
4
5
skytf=> select * From test_27 where name ~ '^[0-9]{11}';  
id | name
----+-------------
6 | 12311111111
(1 row)

备注:上面检索条件中的大括号,表示检索范围。

正则表达式的基础知识

正则表达式匹配操作符
正则表达式之一: 用于查询过滤

正则表达式原子
正则表达式之一: 用于查询过滤

正则表达式量词
正则表达式之一: 用于查询过滤

正则表达式约束
正则表达式之一: 用于查询过滤

上面只列出正则表达式的一些基础知识,正则表达式的检索能力相当强大,特别是对于类型为 Text 类型,并且存储的是XML数据时,正则表达式的优势将更能发挥作用。关于更详细的信息可以参考文档http://www.postgresql.org/docs/9.0/static/functions-matching.html

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/236383.html

(0)
上一篇 2022年1月24日
下一篇 2022年1月24日

相关推荐

发表回复

登录后才能评论