我有大约200,000条带有电话号码的数据记录,但数字不一致。
例如,有些可能是10位数(在开头时缺少0),有些在那里有空格,有些有' - '在中间,有些以' + 44'开头。而不是0。mySQL中是否有办法调整所有这些并在一个查询中清理数据?
答案 0 :(得分:0)
假设电话号码字段是一个字符串 - 以下内容应该处理您指定的条件:
RIGHT( LPAD( REPLACE( REPLACE( REPLACE('phonenumber', '-', ''), '+44', ''), ' ', ''), 11, '0' ), 11 )
首先删除任何' - ',然后删除'+44',然后删除空格,然后将11'0添加到数字的开头,最后取最右边的11个字符。
所以你会用UPDATE查询替换phonenumber列。
答案 1 :(得分:0)
没有样本数据且没有示例输出,这纯粹是推测性的,假设您希望输出格式为01234567891
。
使用LENGTH
,REPLACE' AND
LEFT`功能的组合来解决您突出显示的4个问题:
SELECT CASE WHEN LENGTH(REPLACE(REPLACE(numberfield, '-', ''), ' ', '')) = 10
THEN CONCAT('0', REPLACE(REPLACE(numberfield, '-', ''), ' ', ''))
WHEN LEFT(REPLACE(REPLACE(numberfield, '-', ''), ' ', ''), 3) = '+44'
THEN REPLACE(REPLACE(REPLACE(numberfield, '-', ''), ' ', ''), '+44', '0'
END AS Cleannumber
FROM yourtable