MySQL中匹配首字母为a/b/c/f等的简化查询方法咨询
更简洁的MySQL查询写法
当然有更简洁的写法!你说的没错,直接用IN ('a%', 'b%')确实不行,因为IN是做精确字符串匹配的,它会把'a%'当成完整的字符串去比对,而不是模糊匹配的通配符。下面给你两种常用的简洁方案:
方案一:使用正则表达式(REGEXP/RLIKE)
MySQL支持正则匹配,你可以用REGEXP或者它的别名RLIKE来匹配首字母在指定范围内的内容:
SELECT * FROM your_table WHERE your_column REGEXP '^[abcf]';
^表示匹配字符串的开头位置[abcf]表示匹配括号里的任意一个字符,也就是首字母是a、b、c、f中的任意一个
如果你的字段内容可能包含大小写,想要忽略大小写的话,可以转换后匹配:
-- 忽略大小写的写法 SELECT * FROM your_table WHERE LOWER(your_column) REGEXP '^[abcf]';
方案二:用LEFT()函数配合IN
另一种思路是提取字段的首字母,再用IN来匹配,这样就可以利用IN的简洁性了:
SELECT * FROM your_table WHERE LEFT(your_column, 1) IN ('a', 'b', 'c', 'f');
LEFT(your_column, 1)会取出字段值的第一个字符- 之后用
IN来匹配这个首字母是否在指定的集合里,逻辑清晰又简洁
如果需要支持大小写,同样可以转换后匹配:
SELECT * FROM your_table WHERE LOWER(LEFT(your_column, 1)) IN ('a', 'b', 'c', 'f');
两种方案各有优劣:正则表达式更灵活(比如可以匹配连续范围,比如^[a-cf]),而LEFT()+IN的写法对新手更友好,可读性更强,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Arpan Jain
相关产品推荐
相关产品推荐

