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

Hen*_*nry 13 mysql select wildcard sql-like

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

  • 一条记录的电话可能是"+ 123-456 78.90"
  • 查询"6789"或任何完整或不完整的正确数字顺序的查询应该提出该记录.

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

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

任何帮助都感激不尽.

Har*_*ari 33

我看到两种方式:

  1. 如果你只允许几个额外的字符,你可以准备一个从这些额外字符中剥离的字符串,你使用LIKE运算符,你通常会

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%'
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3'
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

我对零件编号和不需要的字符也有同样的问题。我的解决方案是

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';
Run Code Online (Sandbox Code Playgroud)

  • 这个答案与公认的答案有何不同? (5认同)