You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何仅筛选以大写字母N开头的名称?——解决LIKE/RLIKE语句返回大小写N结果的问题

解决SQL查询仅匹配大写N开头记录的问题

嘿,这个坑我之前踩过!你遇到的问题根源在于数据库的排序规则(collation)默认是不区分大小写的,所以哪怕你写了'N%'或者'^N',数据库还是会把小写n开头的记录也匹配出来。下面给你几个实用的解决办法:

方法1:查询时指定区分大小写的排序规则

在WHERE条件里加上COLLATE子句,强制使用二进制区分大小写的排序规则(以MySQL为例):

SELECT * FROM states WHERE name LIKE 'N%' COLLATE utf8_bin ORDER BY id ASC;

如果用正则表达式的话,同样可以加:

SELECT * FROM states WHERE name RLIKE '^N' COLLATE utf8_bin ORDER BY id ASC;

utf8_bin会直接按字符的二进制值比较,大写N和小写n的二进制编码不同,就能精准区分开了。

方法2:使用BINARY操作符强制二进制比较

另一个简单的方式是用BINARY操作符把字段转成二进制再匹配:

-- LIKE写法
SELECT * FROM states WHERE BINARY name LIKE 'N%' ORDER BY id ASC;

-- 正则写法
SELECT * FROM states WHERE name RLIKE BINARY '^N' ORDER BY id ASC;

这个操作符会让数据库忽略默认的排序规则,严格按二进制值来判断匹配,效果和上面的方法一致。

方法3:修改字段的默认排序规则(长期方案)

如果你的业务场景经常需要区分大小写,也可以直接修改name字段的排序规则:

ALTER TABLE states MODIFY COLUMN name VARCHAR(100) COLLATE utf8_bin;

⚠️ 注意:这个操作会影响该字段的所有查询和索引,修改前最好备份数据,确认不会影响其他业务逻辑。

针对PostgreSQL的补充

如果你用的是PostgreSQL,默认是区分大小写的,但如果字段用了citext类型(不区分大小写的文本),可以用以下写法:

SELECT * FROM states WHERE name LIKE 'N%' COLLATE "C" ORDER BY id ASC;

或者直接用正则的严格匹配:

SELECT * FROM states WHERE name ~ '^N' ORDER BY id ASC;

内容的提问来源于stack exchange,提问作者Shimaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:32:30