mysql - 在 SQL 查询中选择对号
问题描述
数据库:
+------------+
| Number |
+------------+
| 0050000235 |
+------------+
| 5532003644 |
+------------+
| 1122330505 |
+------------+
| 1103220311 |
+------------+
| 1103000011 |
+------------+
| 1103020012 |
+------------+
要选择具有一对“0”的数字,我尝试了 3 次:
SELECT * FROM numbers
WHERE Number LIKE "%00%00%00%"
OR Number LIKE "%00%0000%"
OR Number LIKE "%0000%00%"
OR Number LIKE "0000%00%"
OR Number LIKE "%00%0000"
OR Number LIKE "00%0000%"
OR Number LIKE "%0000%00"
OR Number LIKE "%0000%00"
OR Number LIKE "%000000%"
OR Number LIKE "000000%"
OR Number LIKE "%000000"
这导致我:
0050000235
但是我使用的方式,我认为这不是一个干净的方法。
问题如何获取具有 3 对的数字使用干净的 SQL 查询
结果将是:
0050000235, 5532003644, 1122330505, 1103220311 & 1103000011
解决方案
使用 UNION ALL 创建从 0 到 9 的一系列数字并交叉连接到表。
这些数字中的每一个都将加倍并在表格的列中替换为空字符串。每个替换的长度差异将被求和,如果大于 6,则意味着至少存在 3 对:
select
n.number
from (
select 0 d union all select 1 d union all select 2 union all
select 3 union all select 4 union all select 5 union all
select 6 union all select 7 union all select 8 union all select 9
) s cross join numbers n
group by n.number
having sum(
length(n.number) - length(replace(n.number, repeat(d, 2), ''))
) >= 6
请参阅演示。
结果:
| number |
| ---------- |
| 0050000235 |
| 1103000011 |
| 1103220311 |
| 1122330505 |
| 5532003644 |
推荐阅读
- microsoft-graph-api - 如何在共享邮箱中创建带有大附件的电子邮件
- python-3.x - Python Zeep WSDL 意外元素回溯
- python - 在 groupby 之后,根据组中所有行中的列值评估列中的值
- java - Eclipse 中未创建 EJB 2.0 存根
- r - ggiraph:带有超链接的工具提示?
- java - 比较列表
按索引 - ios - 隐藏元素时调整包含 UIStackView 的 xib 的高度
- linux - 将 pcm 流数据转换为编码的 aac 数据
- ms-access - 添加背景图像时,MS Access 表单大小会增加
- npm - 并发使用时为什么npm找不到我的命令