如何忽略MYSQL SELECT LIKE%...上的字符

时间:2012-03-24 08:19:55

标签: mysql select wildcard sql-like

我有一个带有phone列的表格,其中数据可能在数字之间有空格,点,短划线或+符号。 我需要使用忽略所有这些字符的LIKE通配符进行搜索,例如:

  • 一条记录的电话可能是“+ 123-456 78.90”
  • 查询“6789”或任何完整或不完整的正确数字顺序的查询应该显示该记录。

不幸的是,我无法清理原始表以删除非数字字符并执行简单的SELECT LIKE%...%。

MYSQL具有替换/删除字符串中字符的功能,但无法找到在带有widlcarded LIKE的查询中使用它们的方法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:33)

我认为有两种方法可以做到这一点:

  1. 如果你只允许一些额外的字符,那么你可以准备一个从这些额外字符中删除的字符串,你可以使用LIKE运算符

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%'
    

    当然,您需要与允许的额外字符数一样多的替换调用

  2. 您使用正则表达式,假设您正在搜索模式123

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3'
    

答案 1 :(得分:4)

我遇到了与partnumbers和不需要的字符相同的问题。 我的解决方案是

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';