SQLite查询首字符为A-F(不区分大小写)的name无返回值问题
你使用的[A-Fa-f]范围匹配语法不属于标准SQL的LIKE操作符支持的通配符规则,只有少部分数据库(如SQL Server、Access)的方言支持该扩展写法,MySQL、PostgreSQL、SQLite等绝大多数主流数据库会把方括号当作普通字符匹配,也就是会去查找首字符是[的字符串,自然不会返回符合要求的结果。
解决方案
1. 全数据库兼容写法
直接截取首字符后做范围判断,所有SQL数据库都支持该语法:
SELECT name FROM pet WHERE LOWER(SUBSTRING(name, 1, 1)) BETWEEN 'a' AND 'f';
如果你的库表排序规则本身是大小写不敏感的,可以省略LOWER()函数简化写法。
2. 正则匹配写法(支持正则的数据库通用)
绝大多数主流数据库都支持正则匹配操作符,写法更简洁:
-- MySQL、SQLite 写法 SELECT name FROM pet WHERE name REGEXP '^[A-Fa-f]'; -- PostgreSQL 写法 SELECT name FROM pet WHERE name ~ '^[A-Fa-f]';
3. 纯LIKE写法(不推荐,仅做参考)
如果只能用LIKE语法,可以拆分多个匹配条件:
SELECT name FROM pet WHERE LOWER(name) LIKE 'a%' OR LOWER(name) LIKE 'b%' OR LOWER(name) LIKE 'c%' OR LOWER(name) LIKE 'd%' OR LOWER(name) LIKE 'e%' OR LOWER(name) LIKE 'f%';
内容的提问来源于stack exchange,提问作者SLN
相关产品推荐
相关产品推荐

