sql手机号码尾数优号选择

konio 2009-09-23 05:05:48
手机号码尾数优号选择
单字段mobile_number
判断格式
AAAA 如:15980021111
AAABBB 如:15980222111
AABBCC 如:15980221133
AAAAB 如:15980011112


sql如何实现?
...全文
437 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
YHL27 2009-09-26
  • 打赏
  • 举报
回复
sf!!
foolbirdflyfirst 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 konio 的回复:]
可能理解错了
再补充一下

字段 mobile_number 内有下面数据
15980021111
15980022222
15980023333
15980024444
15980025555
15980222111

优号的判断是
15980021111  尾数有四个相同1 所以是 AAAA类型优号 (指四个尾数相同,可能是0-9任意一个)

    如果尾数五个相同              是 AAAA类型优号

15980222111  尾数是3个相同2跟3个相同1  所以是AAABBB类型优号(指尾数两个不同数据连续相同3次)

[/Quote]
在php业务端处理,mysql最好不要参与逻辑运算,类似这种正则,用mysql做感觉得不偿失。
或者说你插入数据库之前就在php端判断好电话号码的优越度,直接开令一个字段存储一个整形数值。比如1就代表AAAA结尾,2就代表AAABBB结尾。。。
应该网 2009-09-25
  • 打赏
  • 举报
回复
不要在sql语句上下太多功夫了,就算实现了也是效率很低的吧。

我觉得事先判断再存储好了。毕竟你需要将号码存入数据库记录,存入的时候用程序就很好判断了。
阿_布 2009-09-25
  • 打赏
  • 举报
回复

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)
江南昆虫 2009-09-24
  • 打赏
  • 举报
回复
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),'')='';
江南昆虫 2009-09-24
  • 打赏
  • 举报
回复
好像都不对了,mysql好像不支持逆向引用啊\\1
江南昆虫 2009-09-24
  • 打赏
  • 举报
回复
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个是错的,再研究.....
klend 2009-09-24
  • 打赏
  • 举报
回复
去mysql手册 里找找 REGEXP 这个函数的用法
阿_布 2009-09-24
  • 打赏
  • 举报
回复
不可能只有一个号码就一个等级吧!

select if(find_in_set('15980021111',number)>0,'AAAA','') 等级
union all
select if(find_in_set('15980222111',number)>0,'AAABBB','')
.....................
konio 2009-09-24
  • 打赏
  • 举报
回复
可能理解错了
再补充一下

字段 mobile_number 内有下面数据
15980021111
15980022222
15980023333
15980024444
15980025555
15980222111

优号的判断是
15980021111 尾数有四个相同1 所以是 AAAA类型优号 (指四个尾数相同,可能是0-9任意一个)

如果尾数五个相同 是 AAAA类型优号

15980222111 尾数是3个相同2跟3个相同1 所以是AAABBB类型优号(指尾数两个不同数据连续相同3次)
应该网 2009-09-23
  • 打赏
  • 举报
回复
似乎可以先在数据库记录中将特殊的号码标记

如15980021111对应的是AAAA
15980222111对应的是AAABBB

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧