繁体   English   中英

提取只有2种类型的数字

[英]Fetch numbers having only 2 types number

MySQL数据库:

+-----------+
| Number    |
+-----------+
| 121255    |
+-----------+
| 22552525  |
+-----------+
| 122221221 |
+-----------+
| 555554    |
+-----------+
| 55445533  |
+-----------+

如何只获取具有任意两个数字的那些数字? 结果将是:

22552525和122221221和555554

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

因此, WHERE子句仅在计数恰好为2的情况下返回行

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

我假设该列只能包含数字。
应用两次replace()以便删除其余字符串的第一个字符,然后删除第一个字符。
如果剩下的是一个空字符串,则此数字仅包含2个不同的数字。

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 

参见演示
结果:

| number    |
| --------- |
| 22552525  |
| 122221221 |
| 555554    |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM