MySQL查询:如何找出字符串中位置相同的重复字符
解决方法
假设你的表名为test_table,存储字符串的列名为str_val,可以用以下SQL查询找出所有位置相同且字符一致的内容:
通用SQL方案(适用于支持递归CTE的数据库:MySQL 8+、PostgreSQL、SQL Server等)
WITH RECURSIVE pos AS ( -- 初始化第一个位置 SELECT 1 AS position UNION ALL -- 递归生成后续所有位置,直到字符串长度 SELECT position + 1 FROM pos WHERE position < (SELECT LENGTH(str_val) FROM test_table LIMIT 1) ) SELECT p.position AS 字符位置, SUBSTRING(t.str_val, p.position, 1) AS 一致字符 FROM pos p CROSS JOIN test_table t GROUP BY p.position -- 筛选出该位置所有字符都相同的记录 HAVING COUNT(DISTINCT SUBSTRING(t.str_val, p.position, 1)) = 1;
代码说明
- 递归CTE
pos自动生成从1到字符串总长度的所有位置编号,无需手动指定长度(如果字符串长度固定,也可以直接用数字序列代替,比如SELECT 1 UNION SELECT 2 ... UNION SELECT 11)。 SUBSTRING(t.str_val, p.position, 1)用于提取每个字符串在对应位置的单个字符。- 通过
GROUP BY按位置分组,COUNT(DISTINCT ...)判断该位置的字符是否唯一(即所有行的字符都一致),等于1时保留该位置。
针对你的示例数据
执行上述查询后,会得到如下结果:
| 字符位置 | 一致字符 |
|---|---|
| 6 | A |
| 10 | B |
内容的提问来源于stack exchange,提问作者PitaChan
相关产品推荐
相关产品推荐

