何来剥离和替换mysql中的值

时间:2016-07-27 08:30:45

标签: mysql

我有大约200,000条带有电话号码的数据记录,但数字不一致。

例如,有些可能是10位数(在开头时缺少0),有些在那里有空格,有些有' - '在中间,有些以' + 44'开头。而不是0。

mySQL中是否有办法调整所有这些并在一个查询中清理数据?

2 个答案:

答案 0 :(得分:0)

假设电话号码字段是一个字符串 - 以下内容应该处理您指定的条件:

RIGHT( LPAD( REPLACE( REPLACE( REPLACE('phonenumber', '-', ''), '+44', ''), ' ', ''), 11, '0' ), 11 )

首先删除任何' - ',然后删除'+44',然后删除空格,然后将11'0添加到数字的开头,最后取最右边的11个字符。

所以你会用UPDATE查询替换phonenumber列。

答案 1 :(得分:0)

没有样本数据且没有示例输出,这纯粹是推测性的,假设您希望输出格式为01234567891

使用LENGTHREPLACE' AND LEFT`功能的组合来解决您突出显示的4个问题:

  1. 在开始时缺少0。
  2. 字符串中的空格。
  3. - 在字符串中。
  4. +44而不是0。
  5. 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