【发布时间】:2020-11-23 09:47:10
【问题描述】:
MySQL 专栏:
电话 = '(999)-666-333'
用于搜索“999666333”的字符串
有没有一种方法可以通过在 WHERE 命令中转换值 '(999)-666-333' 来进行搜索? 我想去掉所有非数字,只留下数字。
类似:
select * from users where regex(phone, '[0-9]') = '999666333';
【问题讨论】:
-
可以,但是 mysql 将无法使用索引来查找值。您最好按照您将要搜索的方式存储电话号码,并将它们格式化以用于显示目的或将显示值存储在单独的字段中。
-
我知道。不幸的是,我已经将它们存储在生产环境中(大量数据),并且某些搜索不起作用……当然它们不起作用。我正在尝试找到解决此问题的方法。
-
添加一列,该列将存储从所有非数字字符中清除的数字(推荐的 INT 或 BIGINT 数据类型取决于最大数字长度)。更新它。通过它创建索引并在您的查询中使用。创建将在插入/更新期间创建/更新此列值的触发器。
-
@SlavaRozhnev 这是一个很好的线索,谢谢。不知道为什么我没有想到这个:)
-
@Akina - 我重新打开了这个问题,以便您可以将您的评论作为答案提出。 “dup”(stackoverflow.com/questions/287105/…)明确表示“速度不是问题”。此外,对于不想先清理数据的任何人来说,您关于使用触发器的评论是一个有趣的补充。