我有一个姓氏,名字,地址等数据库。
我正在尝试按姓氏搜索,并且我没有遇到撇号的问题,例如,表中的数据是“O'Malley”,如果我搜索“O'Malley”,我会得到预期的结果。
但是,我也希望能够搜索“omalley”并仍然从表中返回“O'Malley”记录。有没有办法忽略表中的撇号?
或者,是我唯一的另一种选择,即创建一个剥离了撇号的姓氏字段,然后使用和OR语句来检查两者。
答案 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。