首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取只有两个类型编号的数字

问获取只有两个类型编号的数字
EN

Stack Overflow用户
提问于 2019-07-05 17:18:14
回答 2查看 42关注 0票数 0

MySQL数据库:

代码语言:javascript
复制
+-----------+
| Number    |
+-----------+
| 121255    |
+-----------+
| 22552525  |
+-----------+
| 122221221 |
+-----------+
| 555554    |
+-----------+
| 55445533  |
+-----------+

怎么才能得到那些有两个号码的数字呢?其结果将是:

22552525及122221221及555554

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-05 17:34:39

测试从0到9的每一个数字的列,如果匹配,则将1添加到计数中。

因此,WHERE子句只返回计数正好为2的行。

代码语言:javascript
复制
SELECT 
    *
FROM mytable
WHERE 
    CASE WHEN number LIKE '%1%' THEN 1 ELSE 0 END + 
    CASE WHEN number LIKE '%2%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%3%' THEN 1 ELSE 0 END + 
    CASE WHEN number LIKE '%4%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%5%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%6%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%7%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%8%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%9%' THEN 1 ELSE 0 END +
    CASE WHEN number LIKE '%0%' THEN 1 ELSE 0 END
    = 2
票数 0
EN

Stack Overflow用户

发布于 2019-07-05 17:54:44

我假设列只能包含数字。

应用两次replace(),以便删除第一个字符,然后删除其余字符串的第一个字符。

如果剩下的是一个空字符串,那么这个数字只包含两个不同的数字。

代码语言:javascript
复制
select * from tablename
where 
  length(replace(number, left(number, 1), '')) > 0
  and              
  length(replace(
    replace(number, left(number, 1), ''),
    left(replace(number, left(number, 1), ''), 1),
    ''
  )) = 0 

见演示。

结果:

代码语言:javascript
复制
| number    |
| --------- |
| 22552525  |
| 122221221 |
| 555554    |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56907067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档