2015-05-09 48 views
0

我正在嘗試搜索包含\或/或a |的字符串。存儲在表格的列中的字符。正在搜索和| PostgresSQL中的字符串中的字符

舉個例子:

我有一個叫藥物的表。

可以說,這種藥物表的列是品牌

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

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

'在哪裏m.brand〜'。* [\ | \\\ /]。*''看起來好像會起作用,當您嘗試時出了什麼問題? –

+0

「\」不通過 – cur4so

回答

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,「\」是一個特殊的符號 - 並且需要特殊的轉義。但在9.x行上它應該工作。