从数据库中获取表名时,Postgresql忽略_字符

时间:2017-11-27 18:55:33

标签: sql postgresql

我的postgresql数据库中有很多表,有些以p开头,有些以p_开头。 e.g:

 1. ptasi
 2. pnomu
 3. pteni
 4. p_1150
 5. p_1010
 6. p_6050

当我搜索以p_开头的表格时:

SELECT table_name 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
AND table_name Like 'p_%'
AND table_schema = 'public'

它将返回所有六个表

 1. ptasi
 2. pnomu
 3. pteni
 4. p_1150
 5. p_1010
 6. p_6050

而不是

 4. p_1150
 5. p_1010
 6. p_6050

我们怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

下划线是LIKE表达式中任意字符的通配符。

如果要匹配文字下划线,请使用反斜杠将其转义:

t=# with v(t) as (values('p_11'),('pop'))
select t from v where t like 'p\_%';
  t
------
 p_11
(1 row)

如果你在表名中有退格(这可能很奇怪,但仍然如此),你可以指定转义字符,例如:

t=# with v(t) as (values('p_11'),('pop'))
select t from v where t like 'p@_%' escape '@';
  t
------
 p_11
(1 row)

手册:https://www.postgresql.org/docs/current/static/functions-matching.html

  

模式中的下划线(_)代表(匹配)任何单个   字符;百分号(%)匹配零或更多的任何序列   字符。