带有撇号的姓氏的SQL查询

时间:2010-11-11 15:44:36

标签: php sql mysql

我有一个姓氏,名字,地址等数据库。

我正在尝试按姓氏搜索,并且我没有遇到撇号的问题,例如,表中的数据是“O'Malley”,如果我搜索“O'Malley”,我会得到预期的结果。

但是,我也希望能够搜索“omalley”并仍然从表中返回“O'Malley”记录。有没有办法忽略表中的撇号?

或者,是我唯一的另一种选择,即创建一个剥离了撇号的姓氏字段,然后使用和OR语句来检查两者。

4 个答案:

答案 0 :(得分:3)

尝试类似:

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

编辑 - 更正了REPLACE语法

答案 1 :(得分:2)

您可以检查REPLACE('''','',column_name)值,并为自己保存一个额外的“可索引”列。

答案 2 :(得分:1)

如果您的数据库支持SOUNDEX - 您可以搜索“声音”如omalley的名称。当你想尝试快速找到人并且不必询问如何拼写某些东西时,Soundex真的很有用...... More about Soundex

例如,我看到托马斯拼写Tomas,Tomes,Tomus的名字 - 即使所有拼写不同,soundex会找到它 - 因为它们都“听起来一样”。特别是现在当人们正在寻找拼写常用名字的不同方法时,这可能非常有用。

答案 3 :(得分:0)

'的所有实例替换为'?并使用REGEXP

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

如果您对正则表达式中的?不熟悉,则表示“此角色可以在此处显示,但不一定非法。”例如,colou?r将匹配“颜色”和“颜色”。

注意:此解决方案适用于MySQL,但我不知道您正在使用什么DBMS。