提取只有2种类型的数字

时间:2019-07-05 17:18:14

标签: mysql

MySQL数据库:

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

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

22552525和122221221和555554

2 个答案:

答案 0 :(得分:0)

测试列中从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

答案 1 :(得分:0)

我认为该列只能包含数字。
应用两次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 

请参见demo
结果:

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