正在搜索\和| PostgreSQL中字符串中的字符

时间:2015-05-09 03:30:17

标签: regex postgresql

我正在尝试搜索包含\或/或|的字符串存储在表格列中的字符。

所以举个例子:

我有一张叫做药物的桌子。

我们可以说这个药物表的栏目是品牌

品牌表有一些字符串值,如:

abcef\ang\el
mghi/profe|ssional
bb/er|sup/er

我想在药物表中搜索具有\,/或a的任何记录字符。正如您所看到的,这些角色可能会出现很多次

如果有匹配则我需要返回整个记录。

任何人都可以提供帮助,并建议他是否正确或表现出更好的方式。请注意我打算使用正则表达式,因为这是一个大表,我也将这张表与其他表一起使用。

这就是我所做的:

select m.brand 
from medication m 
where m.brand ~ '.*[\|\\\/].*'

我也尝试使用regex_matches,但在where子句

中使用它没有任何运气

我也试过这个

select regex_matches(m.brand,'.*[\\\|\/].*',) from medication m

但我得到内核错误

任何帮助将不胜感激

感谢 松鸦

1 个答案:

答案 0 :(得分:1)

以下代码有效:

postgres=# SELECT * FROM foo;
┌────────────────────┐
│         a          │
╞════════════════════╡
│ abcef\ang\el       │
│ mghi/profe|ssional │
│ bb/er|sup/er       │
└────────────────────┘
(3 rows)

SELECT * FROM foo WHERE a LIKE ANY (ARRAY['%|%','%\\%','%/%']);
SELECT * FROM foo WHERE a like '%|' OR a LIKE '%\\%' OR a LIKE '%/%';
or 
postgres=# SELECT * FROM foo WHERE a ~ '[\\|/]';
┌────────────────────┐
│         a          │
╞════════════════════╡
│ abcef\ang\el       │
│ mghi/profe|ssional │
│ bb/er|sup/er       │
└────────────────────┘
(3 rows)

注意 - 它可能取决于PostgreSQL版本。对于一些较旧的PostgreSQL a" \"是一个特殊的符号 - 需要特殊的逃避。但是在9.x线上它应该可以工作。