在 MySql 中,有没有办法将值与列中的数字进行比较?

Posted

技术标签:

【中文标题】在 MySql 中,有没有办法将值与列中的数字进行比较?【英文标题】:In MySql is there a way to compare a value to only the digits in a column? 【发布时间】:2015-02-09 19:11:44 【问题描述】:

当用户输入电话号码的一部分时,我需要比较并查找该部分电话号码的匹配记录。我遇到的问题是每个人输入电话号码的方式不同。

(555) 123-4567
(444)333-2222
1.800.876.9000
1-555-333-1111
etc. etc. and on and on.  

所以我的想法是,如果有办法从数据库中的字段中删除任何和所有标点符号,我就可以轻松地与用户选择搜索的任何内容进行比较...555、9000 或 123。

有没有办法:

SELECT * FROM person WHERE only the digits of the phone column LIKE '%searchValue%'

【问题讨论】:

试试RegExp 命令。看这里:dev.mysql.com/doc/refman/5.0/en/pattern-matching.html 您可以在将其保存到数据库之前删除这些符号或强制用户使用给定格式之一 @ExpectoPatronum 恕我直言,这根本不是一个选择 【参考方案1】:

事实证明,正如我所想的那样,我错过了一些非常容易的事情......

SELECT *
FROM person p 
WHERE REPLACE(phone, '[^0-9]+', '') LIKE '%555123%';

正是我想要的。如果有更高效、更快捷的查询方式,请告诉我!

【讨论】:

您的解决方案在大型表上会很慢,因为必须扫描表中的每一行。您无法使用索引。 安迪还有别的办法吗? 您告诉@ExpectoPatronum 在保存到数据库之前您无法删除符号,但我敢打赌您可以创建第二列,例如phonedigits,它没有符号。但是,即使那样,您也只能在开头没有 % 的情况下进行 LIKE 匹配,否则索引将不会被使用。阅读use-the-index-luke.com,了解有关索引的各种好东西。

以上是关于在 MySql 中,有没有办法将值与列中的数字进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

将值与mysql中表的所有字段进行比较[重复]

将值与mysql中表的所有字段进行比较[重复]

我想更新 mysql 表中的数据,如果列 store_url 值与列 site_url 完全相同,则列 title_modal 将被更新

如何将值与前导零或一般对齐?

将所有列值与 Excel 中的单个单元格进行比较

JPA CriteriaBuilder 中的自定义表达式