如何编写SQL查询仅返回包含指定小写字母的名称?
问题原因
- 你在查询中使用了
LOWER(Name)将Name字段的所有字符统一转为小写后再做匹配,原本字段中的大写U会被转换为小写u,完全命中%u%的匹配规则,自然会返回仅含大写U的记录。 - 额外的潜在影响因素:如果你的库、表或者
Name字段的排序规则(collation)设置为不区分大小写(后缀一般带ci标识,比如常见的utf8_general_ci),即便不调用LOWER函数,直接写Name LIKE "%u%"也会匹配到含大写U的记录。
修正方案
你需要强制查询时区分大小写匹配,不同数据库的常用写法如下:
- MySQL / MariaDB:使用
BINARY关键字强制二进制比较
SELECT * FROM County WHERE Name LIKE BINARY "%u%";
- SQL Server:通过
COLLATE指定区分大小写的排序规则
SELECT * FROM County WHERE Name COLLATE SQL_Latin1_General_CP1_CS_AS LIKE "%u%";
- PostgreSQL:直接使用区分大小写的正则匹配运算符
~
SELECT * FROM County WHERE Name ~ 'u';
内容的提问来源于stack exchange,提问作者nostrad0muz
相关产品推荐
相关产品推荐

