加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MySql > 正文

mysql – 选择具有不同区号的重复电话号码的所有行?

发布时间:2020-05-24 09:12:37 所属栏目:MySql 来源:互联网
导读:我有一个名为contact的表,其中包含以下字段:+----+-------+--------------+ | id | name | phone_no | +----+-------+--------------+ 假设,我在此表中有以下值:+----+-------+--------------+ | id | name | phone_n

我有一个名为contact的表,其中包含以下字段:

+----+-------+--------------+
| id | name  | phone_no     |
+----+-------+--------------+

假设,我在此表中有以下值:

+----+-------+--------------+
| id | name  | phone_no     |
+----+-------+--------------+
| 1  | Alex  | 9907661234   |--1,2 are 
| 2  | Alex  | 09907661234  |--Same contacts but preceding with '0'
| 3  | John  | 9879612363   |--Same contacts but preceding with '91'
| 4  | John  | 919879612363 |-- 91 is (country code)
| 5  | Shawn | 9979867123   |
+----+-------+--------------+

我想找到重复数字的重复联系人数量(这里是前面的数字),0和91是重复的.

我想要以下输出:

+------------+-------------+
| phone_no   |     cn      |
+------------+-------------+
| 9879612363 |           2 |
| 9907661234 |           2 |
+------------+-------------+
最佳答案 假设您的电话号码是10个字符(正如您在问题中所示)并且可选地以某些代码为前缀.然后你可以在MySQL中使用RIGHT(str,len)函数返回指定的最右边的字符数.

查询如下(阅读评论):

SELECT  RIGHT(`phone_no`,10) as `mobile`,-- selecting last 10 digits
        count(*) as `tatal_count`
FROM `table_name`
GROUP BY `mobile`  -- group by last ten digits
HAVING count(`mobile`) > 1;  -- if you want to select on duplicates

工作范例:

创建表格:

CREATE TABLE IF NOT EXISTS `details` (
  `id` varchar(64) NOT NULL,`name` varchar(64) DEFAULT NULL,`phone` varchar(64) DEFAULT NULL,PRIMARY KEY (`id`)
)

插入查询:

INSERT INTO `details` VALUES 
("1","Alex","9907661234"),("2","09907661234"),("3","John","9879612363"),("4","919879612363"),("5","Shawn","9979867123");

[回答]

mysql> SELECT  RIGHT(`phone`,->         count(*) as `tatal_count`
    -> FROM `details`
    -> GROUP BY `mobile`
    -> ;
+------------+-------------+
| mobile     | tatal_count |
+------------+-------------+
| 9879612363 |           2 |
| 9907661234 |           2 |
| 9979867123 |           1 |
+------------+-------------+
3 rows in set (0.04 sec)

假设您只想要那些重复的数字(不止一个),那么您可以在MySQL中使用HAVING子句:

mysql> SELECT  RIGHT(`phone`,->         count(*) as `tatal_count`
    -> FROM `details`
    -> GROUP BY `mobile`
    -> HAVING count(`mobile`) > 1;
+------------+-------------+
| mobile     | tatal_count |
+------------+-------------+
| 9879612363 |           2 |
| 9907661234 |           2 |
+------------+-------------+
2 rows in set (0.00 sec)

我不检查代码是否正确,并假设您在DB中有有效的手机号码

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读