我有一张桌子,里面全是任意格式的电话号码,像这样
027 123 5644
021 393-5593
(07) 123 456
042123456
我需要以类似的任意格式搜索电话号码(例如07123456
应该找到条目(07) 123 456
我在普通编程语言中执行此操作的方法是从“针”中去除所有非数字字符,然后遍历大海捞针中的每个数字,从中去除所有非数字字符,然后进行比较针,例如(红宝石)
digits_only = lambda{ |n| n.gsub /[^\d]/, '' }
needle = digits_only[input_phone_number]
haystack.map(&digits_only).include?(needle)
问题是,我需要在 MySQL 中执行此操作。它有许多字符串函数,但似乎没有一个真正符合我的要求。
目前我能想到2个“解决方案”
- 将
CONCAT
和SUBSTR
- 在针的每个字符之间插入一个
%
(所以它是这样的%0%7%1%2%3%4%5%6%
:)
然而,这些似乎都不是特别优雅的解决方案。
希望有人可以提供帮助,否则我可能会被迫使用 %%%%%% 解决方案
更新:这是对一组相对固定的数据进行操作,可能有几百行。我只是不想做一些未来程序员会为之哭泣的可笑的坏事。
如果数据集增长,我将采用“phoneStripped”方法。感谢所有的反馈!
您能否使用“替换”函数来删除“(”、“-”和“”的任何实例,
我不担心结果是数字。我需要考虑的主要角色是, , 和+
那么-
这个(
解决
方案会是这样吗?)
space
SELECT * FROM people
WHERE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phonenumber, '('),')'),'-'),' '),'+')
LIKE '123456'
那不是很慢吗?