数据库表中一个来电字段caller
caller有普通的手机号,也有带0的手机号,还有010-1234567这样的座机号码等等
请问如何去掉那些前面带0的手机号?
求高效实现

解决方案 »

  1.   

    带0的手机号是什么样的。座机号不去掉? 另外用php还是mysql实现?
      

  2.   


    php实现,座机号从全国各地打来的肯定不能去掉0
      

  3.   

    select ... where left(caller,1)!='0';
      

  4.   

    我相信借助mysql官网manual配合你自己对规则的了解, 一定能写出来的...
      

  5.   

    SELECT * FROM `tbl` WHERE `calller` REGEXP '^01[3458]+';
      

  6.   

    手机号码前段没几个,可以根据这个来判断
    $tel = <<<tel
    013428504829
    013578504829
    057112345678
    07551234567
    02112345678
    0101234567
    tel;$tel = explode("\n", $tel);$tel_arr = array('13', '15', '18');
    foreach ($tel as $key => $val)
    {
    if($val[0] == '0' && in_array("$val[1]$val[2]", $tel_arr))
    $tel[$key][0] = '';
    }
    print_r($tel);
      

  7.   

    如果要在数据库里直接把手机号码前面的0去掉可以这样做update `user` 
    set `tel`= substring(tel,2,length(tel))
    where
    length(`tel`)=14如果只是想在查询出来的结果里把0去掉 可以这样select 
    case when length(tel)=14 then substring(tel,2,length(tel)) else tel end tel
    from user
      

  8.   

    如果要在数据库里直接把手机号码前面的0去掉可以这样做update `user` 
    set `tel`= substring(tel,2,length(tel))
    where
    length(`tel`)=12如果只是想在查询出来的结果里把0去掉 可以这样select 
    case when length(tel)=12 then substring(tel,2,length(tel)) else tel end tel
    from user
      

  9.   

    手机号都是 1 打头
    只要排除掉 010 北京区号就可以了$caller = preg_replace('/^0(1[^0])/', '$1', $caller);
      

  10.   


    如果座机带区号也有12号的话,那就在上面的基础上 加个条件,如果是12位,则看前三位 如果是010就不替换,如果不是则替换,手机号码没有10开头且是13位的吧?
    select 
    case when length(tel)=12 then substring(tel,2,length(tel)) else tel end tel
    from user
    where substring(tel,1,3) != '010'update `user` 
    set `tel`= substring(tel,2,length(tel))
    where
    length(`tel`)=12 and substring(tel,1,3) != '010'
      

  11.   

    直接 mysql 操作
    update tbl_name set caller=substr(caller,2) where caller regexp '^01[^0]'