手机号码尾数优号选择
单字段mobile_number
判断格式
AAAA   如:15980021111
AAABBB 如:15980222111
AABBCC 如:15980221133
AAAAB  如:15980011112
等sql如何实现?

解决方案 »

  1.   

    似乎可以先在数据库记录中将特殊的号码标记如15980021111对应的是AAAA
    15980222111对应的是AAABBB
      

  2.   

    不可能只有一个号码就一个等级吧!select if(find_in_set('15980021111',number)>0,'AAAA','') 等级
    union all
    select if(find_in_set('15980222111',number)>0,'AAABBB','')
    .....................
      

  3.   

    去mysql手册 里找找 REGEXP 这个函数的用法
      

  4.   

    select '15980021111' REGEXP '^[0-9]{7}([0-9])\\1{3}$';#ok
    select '15980222111' REGEXP '^[0-9]{5}([0-9])\\1{2}([0-9])\\2{2}$';#bad
    select '15980221133' REGEXP '^[0-9]{5}([0-9])\\1([0-9])\\2([0-9])\\3$';#bad
    select '15980011112' REGEXP '^[0-9]{6}([0-9])\\1{3}[0-9]$';#ok两个是对的,还有2个是错的,再研究.....
      

  5.   

    好像都不对了,mysql好像不支持逆向引用啊\\1
      

  6.   

    SELECT 'AAAA',mobile_number,Right(mobile_number,4) as a FROM t_konio t Having Replace(a,Right(a,1),'')='';
    SELECT 'AAABBB',mobile_number,SUBSTRING(mobile_number,6,3) as a,Right(mobile_number,3) as b FROM t_konio t Having Replace(a,Right(a,1),'')='' And Replace(b,Right(b,1),'')='';
    SELECT 'AABBCC',mobile_number,SUBSTRING(mobile_number,6,2) as a,SUBSTRING(mobile_number,8,2) as b,Right(mobile_number,2) as c FROM t_konio t Having Replace(a,Right(a,1),'')='' And Replace(b,Right(b,1),'')='' And Replace(c,Right(c,1),'')='';
    SELECT 'AAAAB',mobile_number,SUBSTRING(mobile_number,7,4) as a FROM t_konio t Having Replace(a,Right(a,1),'')='';
      

  7.   

    可能理解错了
    再补充一下字段 mobile_number 内有下面数据
    15980021111
    15980022222
    15980023333
    15980024444
    15980025555
    15980222111优号的判断是 
    15980021111  尾数有四个相同1 所以是 AAAA类型优号 (指四个尾数相同,可能是0-9任意一个)        如果尾数五个相同               是 AAAA类型优号15980222111  尾数是3个相同2跟3个相同1  所以是AAABBB类型优号(指尾数两个不同数据连续相同3次)
      

  8.   

    不要在sql语句上下太多功夫了,就算实现了也是效率很低的吧。我觉得事先判断再存储好了。毕竟你需要将号码存入数据库记录,存入的时候用程序就很好判断了。
      

  9.   


    mysql> select * from s;
    +-------------+
    | phone       |
    +-------------+
    | 15980021111 |
    | 15980022222 |
    | 15980023333 |
    | 15980024444 |
    | 15980025555 |
    | 15980022111 |
    | 15980021422 |
    +-------------+
    7 rows in set (0.02 sec)mysql> select if(find_in_set(right(phone,3),
        -> '000,111,222,333,444,555,666,777,888,999')>0,
        -> if(find_in_set(right(phone,4),
        -> '0000,1111,2222,3333,4444,5555,6666,7777,8888,9999')>0,'AAAA','AAABBB'),
        -> '普通号') rank
        -> from s;
    +--------+
    | rank   |
    +--------+
    | AAAA   |
    | AAAA   |
    | AAAA   |
    | AAAA   |
    | AAAA   |
    | AAABBB |
    | 普通号 |
    +--------+
    7 rows in set (0.00 sec)