我正在尝试清理数据库的电话号码,以便我们可以轻松地搜索它们。在TEL列中,我们有如下行:
654-598-5487
654.254.2456
(458)-5458789 e.3
我想将所有这些值复制到仅传输数字字符的新列中:
6545985487
6542542456
45854587893
新列(TEL_NO_FORMAT)是一个很大的整数,它仅允许数字,但是如果我执行以下操作:
UPDATE CLIENTS set `TEL_NO_FORMAT` = `TEL`
它将仅传输找到的第一个数字字符,而忽略其余的数字:
654
654
NULL
答案 0 :(得分:1)
最简单的方法是REGEXP_REPLACE
(MySQL 8.0 +):
SELECT *, REGEXP_REPLACE(tel_no_format, '[^0-9]','') AS result
FROM clients
在更新查询中回答问题
UPDATE CLIENTS SET TEL_NO_FORMAT = REGEXP_REPLACE(TEL, '[^0-9]','');
答案 1 :(得分:0)
您应在
之前替换不需要的字符UPDATE CLIENTS set `TEL_NO_FORMAT` = replace(replace(replace(`TEL`, '.',''),'-',''),')','')
因为某些字符(例如'-')在转换过程中会产生问题。
无论如何,一个大的int不能正确地管理最终的电话号码0,例如:
00453778988