2010-11-11 132 views
3

我有姓氏,名字,地址的數據庫等SQL查詢的姓氏用單引號

我想按姓氏進行搜索,並且我有escapting撇號,例如沒問題,表中的數據是「O'Malley」,如果我搜索「O'Malley」,我會得到預期的結果。

不過,我也想能夠搜索「omalley」,仍然從表中返回「奧馬利」的紀錄。有沒有辦法忽略表中的撇號?

或者,是我唯一的選擇創建一個姓田的被剝離撇號,然後使用和OR語句來檢查這兩個。

回答

2

你也許可以檢查對REPLACE('''','',column_name)值,並保存自己額外的「可轉位」欄。

+0

林不知道你的意思...因爲該表的撇號,和潛在的搜索詞不會,所以我不能從搜索詞語剝離它。 – Brian 2010-11-11 15:52:12

+0

SELECT desired_columns FROM table WHERE last_name =''OR REPLACE('''','',last_name)='' 不知道你如何比較(確切或部分),但應該給你的想法。雖然你也可以在搜索詞上進行字符串替換,並使apostraphe成爲%並使用LIKE比較器。 – 2010-11-11 15:56:18

+0

$ query =「SELECT * FROM meminfo WHERE LOWER(REPLACE('''','',lname))='omalley'」; 這不會返回任何結果。它有什麼問題嗎? – Brian 2010-11-11 18:12:08

0

'?替換的'所有實例,並使用REGEXP

SELECT * 
    FROM person 
WHERE name REGEXP 'o\'?malley' 

如果你不熟悉正則表達式?,它的意思是「這個角色可以出現在這裏,但它沒有來。」例如,colou?r可以匹配「顏色」和「顏色」。

注意:此解決方案在MySQL中工作,但我不知道您使用的是什麼DBMS。

+0

現在我想到了,我不確定這是對您提問的答案。 – 2010-11-11 16:03:53

3

試着這麼做:

SELECT * -- replace with appropriate field list 
FROM MyTable 
WHERE LOWER(REPLACE(column_name,'''','')) = 'omalley' 

編輯 - 修正REPLACE語法

+0

Bannister:將列設置爲ci? – ajreal 2010-11-11 16:09:28

+0

@ajreal:請你澄清你的評論? – 2010-11-11 16:51:48

+0

這似乎是對我來說最好的答案。 – 2010-11-11 17:02:52

1

如果你的數據庫支持SOUNDEX - 你可以searh上的名字是 「聲音」 像omalley。 Soundex真的很有幫助,當你想嘗試快速找到人,而不必問如何拼寫... More about Soundex

例如我看到的名字托馬斯拼寫Tomas,Tomes,Tomus - 即使所有拼寫有差異,soundex會發現它 - 因爲它們都「聽起來一樣」。特別是現在,當人們在尋找拼寫常用名字的不同方式時,這可能非常有用。