gpt4 book ai didi

mysql - 在mysql中搜索电话号码

转载 作者:IT老高 更新时间:2023-10-29 00:19:37 27 4
gpt4 key购买 nike

我有一张表格,里面全是任意格式的电话号码,就像这样

027 123 5644
021 393-5593
(07) 123 456
042123456

我需要以类似的任意格式搜索电话号码(例如 07123456 应该找到条目 (07) 123 456

我在普通编程语言中执行此操作的方法是从“针”中剥离所有非数字字符,然后遍历干草堆中的每个数字,从中剥离所有非数字字符,然后与针进行比较,例如(在 ruby 中)

digits_only = lambda{ |n| n.gsub /[^\d]/, '' }

needle = digits_only[input_phone_number]
haystack.map(&digits_only).include?(needle)

问题是,我需要在 MySQL 中执行此操作。它有许多字符串函数,但似乎没有一个能真正满足我的要求。

目前我能想到2个“解决方案”

  • CONCATSUBSTR 的科学怪人查询组合在一起>
  • 在针的每个字符之间插入一个 %(所以它是这样的:%0%7%1%2%3%4%5%6%)

然而,这些都不是特别优雅的解决方案。
希望有人能提供帮助,否则我可能会被迫使用 %%%%%% 解决方案

更新:这是对一组相对固定的数据进行操作,可能有几百行。我只是不想做一些 future 的程序员会哭泣的可笑的坏事。

如果数据集增长,我将采用“phoneStripped”方法。感谢所有反馈!


could you use a "replace" function to strip out any instances of "(", "-" and " ",

我不关心结果是数字。我需要考虑的主要字符是+-(, )space那么该解决方案看起来像这样吗?

SELECT * FROM people 
WHERE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phonenumber, '('),')'),'-'),' '),'+')
LIKE '123456'

那会不会很慢?

最佳答案

这从一开始看起来就是个问题。您进行的任何类型的搜索都需要进行表扫描,我们都知道这很糟糕。

在删除所有格式字符后,如何添加一个包含当前电话号码哈希值的列。然后您至少可以索引散列值并避免全面的表扫描。

或者数据量小,预计不会增长多少?然后可能只是将所有数字吸入客户端并在那里运行搜索。

关于mysql - 在mysql中搜索电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com