[英]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.