问题 如何在Postgresql中转义下划线


在Postgresql中搜索下划线时,直接使用该字符 _ 不起作用。例如,如果要在所有表中搜索任何以结尾的列 _by,例如改变日志或活动信息,例如 updated_byreviewed_by等等,以下查询几乎可行:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%_by'

它基本上完全忽略了下划线并返回,就像你搜索了一样 LIKE '%by'。这在所有情况下都可能不是问题,但它有可能成为一个问题。如何搜索下划线?


6954
2018-06-28 19:36


起源

% 和 _ 是通配符 like 匹配。 % =零或更多, _ =任何一个单一字符。 - Marc B


答案:


你需要使用反斜杠来逃避下划线。将示例查询更改为以下内容:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'

12
2018-06-28 19:36



我必须做 ... like E'%\\_by' (在命令行上使用psql,PostgreSQL 8.4.20) - Brad Cupit
如何在这种情况下找到:SELECT table_name,column_name FROM information_schema.columns WHERE column_name LIKE'%name_abc' - Sameer Ek


刚遇到同样的问题,单个反斜杠也不能正常工作。我在PostgreSQL社区上找到了这个文档并且它有效:

正确的方法是用反斜杠转义下划线。您   实际上必须在查询中写两个反斜杠:

选择*来自   像'%\\ _ baz'这样的酒吧

第一个反斜杠引用查询解析器的第二个反斜杠,所以   最终在系统内部的是%\ _ baz,然后是LIKE   函数知道该怎么做。

因此使用这样的东西:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\\_by'

来源文件: https://www.postgresql.org/message-id/10965.962991238%40sss.pgh.pa.us


1
2018-04-22 20:22