2013-06-18 69 views
2

我有一個名爲artists的表,其名稱列中的值爲'Miró'。當我這樣做時:忽略WHERE子句中的特殊字符

SELECT "artists".* FROM "artists" WHERE name = 'Miró' 

我有一個結果,所以它的工作原理。

現在,當我做這個請求(無特殊ó):

SELECT "artists".* FROM "artists" WHERE name = 'Miro' 

我沒有發現任何東西。我想忽略特殊字符。有沒有辦法做到這一點?
我有postgres 9.1.9。

+0

也許只需從您正在搜索字符串中刪除特殊字符..也許用'LIKE'代替'='。 。像'MIR_'這樣的名字 –

+0

嗯,這兩個字符是不同的。所以,你可能需要像'SELECT「藝術家」*。「從」藝術家「的名字像'Mir_'' – 2013-06-18 21:13:59

+0

我認爲已經有一個解決方案存在於計算器:http://stackoverflow.com/questions/ 11005036/does-postgresql-support-accent-insensitive-collat​​ions – thmshd

回答

4

對於一個更有針對性的模式匹配,你可以使用函數unaccent(),通過附加模塊提供unaccent

SELECT * FROM artists WHERE unaccent(name) = 'Miro'; 

要做到這一點,請創建一個功能索引。您必須克服功能僅爲STABLE而不是IMMUTABLE的障礙。我寫了一個全面的解答與說明(包括安裝)和最近的鏈接:
Does PostgreSQL support "accent insensitive" collations?

+1

它的工作原理。即使與heroku。 – Dougui

0

你可以嘗試使用像,而不是...

SELECT "artists".* FROM "artists" WHERE name like 'Mir%' 
+0

是的,它可以工作,但我不想替換每個字符。如果輸入Miro,我不想擁有Miru,Miri或Mira。 – Dougui

+0

有道理。看起來Erwin有一個很好的答案。 – JDCartee