MySQL正则表达式测试:判断6位字符串特定奇数位置字符是否匹配
解决MySQL字符串匹配查询的方案
没问题,我来帮你搞定这个需求!我们可以利用MySQL的字符串截取函数和逻辑条件来实现你要的匹配规则。
核心需求拆解
我们需要筛选出长度为6的字符串,并且满足以下任意一个条件:
- 第1位字符与第3位字符相同
- 第1位字符与第5位字符相同
- 第3位字符与第5位字符相同
基础查询语句(筛选符合条件的字符串)
假设你的表名为your_table,存储目标字符串的列名为target_str,查询语句如下:
SELECT target_str FROM your_table WHERE -- 先确保字符串长度严格为6 LENGTH(target_str) = 6 -- 三个匹配条件满足其一即可 AND ( SUBSTRING(target_str, 1, 1) = SUBSTRING(target_str, 3, 1) OR SUBSTRING(target_str, 1, 1) = SUBSTRING(target_str, 5, 1) OR SUBSTRING(target_str, 3, 1) = SUBSTRING(target_str, 5, 1) );
代码解释
LENGTH(target_str) = 6:过滤掉长度不符合要求的字符串,避免无效判断SUBSTRING(target_str, pos, 1):MySQL中用于截取单个字符的函数,pos是起始位置(注意MySQL字符串位置从1开始计数),最后一个参数1表示只截取1个字符- 三个
OR连接的条件:对应你要求的三种匹配规则,只要满足其中一个就会被筛选出来
返回布尔值的扩展查询(标记每条记录是否匹配)
如果你需要给每条记录直接返回true/false的匹配结果(和你给出的示例格式一致),可以用CASE语句实现:
SELECT target_str, CASE WHEN LENGTH(target_str) != 6 THEN FALSE WHEN SUBSTRING(target_str, 1, 1) = SUBSTRING(target_str, 3, 1) THEN TRUE WHEN SUBSTRING(target_str, 1, 1) = SUBSTRING(target_str, 5, 1) THEN TRUE WHEN SUBSTRING(target_str, 3, 1) = SUBSTRING(target_str, 5, 1) THEN TRUE ELSE FALSE END AS is_match FROM your_table;
用这个查询测试你给出的示例:
aabbcc→falseabbcad→trueaaabcd→truebacada→false1a1b33→true
完全符合你的预期结果!
内容的提问来源于stack exchange,提问作者asutherland
相关产品推荐
相关产品推荐

