2010-04-07 53 views
0

的条款我写了一个MySQL查询正则表达式或替换功能在MySQL查询

select * from table where name like '%salil%' 

其工作正常,但它将不会返回记录名为“SAL-IL”,“山@律”。

所以我想查询类似下面

select * from table whereremove_special_character_from(名称)like '%salil%'

remove_special_character_from(名称)是MySQL的方法或正则表达式,从名称中删除所有特殊字符之前喜欢执行。

回答

1

不,mysql不支持基于regexp的替换。
我建议使用存储在单独字段中的搜索项的规范化版本。

因此,在插入时,您将从数据中除去所有非alpha字符,并将其存储在data_norm字段中以供将来搜索。

1

因为我知道没有办法做到这一点,所以我会使用一个“计算列”,即一列取决于name的值,但没有特殊字符。这样,转换的成本只支付一次,您甚至可以在新列上创建索引。

请参阅this answer如何做到这一点。

1

我同意AaronCol. Shrapnel您应该在表格上使用额外的列,例如search_name来存储名称的标准化版本。

我注意到这个问题最初标签为ruby-on-rails。如果这是Rails应用程序的一部分,则可以使用before_save回调来设置此字段的值。

0

在MySQL 5.1中,你可以使用REGEXP做正则表达式这样

SELECT * FROM foo WHERE bar REGEXP "baz" 

看到http://dev.mysql.com/doc/refman/5.1/en/regexp.html

匹配但请注意,这将是,你应该做别人的海报建议并将清理值存储在单独的字段中。