PostgreSQL DBA(192) - 整行模糊查询

一个数据表有N列,现给出一个值,如某一行中任一列含有该值则返回该行,通常的写法在where语句中添加每一列作为查询条件,如:

og3=# create table t1(id int,c1 varchar,c2 varchar,c3 varchar);
CREATE TABLE
og3=# insert into t1 values(1,'c1','c2','c3');
INSERT 0 1
og3=# insert into t1 values(2,'t1','t2','t3');
INSERT 0 1
og3=# select * from t1 where id::text ~ 'c1' or c1 ~ 'c1' or c2 ~ 'c1' or c3 ~ 'c1';
 id | c1 | c2 | c3
----+----+----+----
  1 | c1 | c2 | c3
(1 row)

PostgreSQL提供了Row数据类型,可以把整行转换为该类型后跟输入值进行匹配,如存在则输出:

og3=# select t.* from t1 t where t::text ~ 'c1';
 id | c1 | c2 | c3
----+----+----+----
  1 | c1 | c2 | c3
(1 row)
og3=# select t from t1 t where t::text ~ 'c1';
      t
--------------
 (1,c1,c2,c3)
(1 row)

参考资料
DBA tips ‘n tricks – search in every field in a table

请使用浏览器的分享功能分享到微信等