2010-11-11 73 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会发现它 - 因为它们都“听起来一样”。特别是现在,当人们在寻找拼写常用名字的不同方式时,这可能非常有用。

相关问题