我正在尝试搜索包含\或/或|的字符串存储在表格列中的字符。
所以举个例子:
我有一张叫做药物的桌子。
我们可以说这个药物表的栏目是品牌
品牌表有一些字符串值,如:
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
但我得到内核错误
任何帮助将不胜感激
感谢 松鸦
答案 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线上它应该可以工作。