如何在SELECT语句中筛选排除以特殊字符开头的列值
SQL查询过滤特殊字符开头记录的实现方案
需求梳理
你需要过滤字段值以非字母开头的记录,仅保留以英文字母开头的结果,针对你给出的示例数据,最终会返回dog、cat、mouse三条记录。
实现方式
1. 正则匹配写法(支持正则的主流数据库通用思路)
核心逻辑是用正则匹配字段值是否以英文字母开头,不同数据库的正则语法略有差异:
- MySQL/MariaDB
-- 假设表名为your_table,存储值的字段名为val SELECT val FROM your_table WHERE val REGEXP '^[a-zA-Z]';
- PostgreSQL
SELECT val FROM your_table WHERE val ~ '^[a-zA-Z]';
- Oracle 10g及以上版本
SELECT val FROM your_table WHERE REGEXP_LIKE(val, '^[a-zA-Z]');
2. 非正则兼容写法(适配不支持正则的数据库场景)
如果数据库不支持正则,可以取字段的第一个字符判断是否属于英文字母范围:
SELECT val FROM your_table WHERE LEFT(val,1) BETWEEN 'a' AND 'z' OR LEFT(val,1) BETWEEN 'A' AND 'Z';
自定义调整说明
如果你需要调整“特殊字符”的判定范围,比如允许数字开头的记录也保留,只需要把正则的匹配规则修改为^[a-zA-Z0-9]即可,非正则写法同理增加对应字符的判断条件就行。
内容的提问来源于stack exchange,提问作者J.Do
相关产品推荐
相关产品推荐

