MySQL如何筛选Cansas市中以字母开头且数字结尾的数据?
解决Cansas市特定key格式的酒店房间数据筛选问题
我来帮你搞定这个SQL筛选的问题!你之前的SQL无效是因为**LIKE操作符不支持标准正则表达式语法**——它只能识别%(匹配任意长度字符)和_(匹配单个字符)这两种通配符,没法解析^、$、[]这类正则标记。
正确的SQL写法(以MySQL为例)
我们需要用REGEXP(或RLIKE,两者等价)来实现正则匹配,同时精准筛选城市为Cansas的数据:
SELECT * FROM hotelroom WHERE city = 'Cansas' AND `key` REGEXP '^[A-Za-z].*[0-9]$';
代码细节解释
city = 'Cansas':比LIKE '%Cansas%'更精准,能避免误匹配像“Cansasville”这类包含Cansas的其他城市名称REGEXP '^[A-Za-z].*[0-9]$':^:锁定字符串的开头位置[A-Za-z]:匹配任意大小写英文字母,确保key以字母开头.*:匹配任意数量的任意字符,允许key中间包含字母、数字、符号等内容[0-9]:匹配任意数字,确保key以数字结尾$:锁定字符串的结尾位置
其他数据库的适配写法
如果你的数据库不是MySQL,也可以对应调整:
- PostgreSQL:使用
~操作符替代REGEXPSELECT * FROM hotelroom WHERE city = 'Cansas' AND "key" ~ '^[A-Za-z].*[0-9]$'; - SQL Server:使用
PATINDEX函数实现类似逻辑SELECT * FROM hotelroom WHERE city = 'Cansas' AND PATINDEX('%[0-9]$', [key]) > 0 AND PATINDEX('^[A-Za-z]%', [key]) > 0;
执行上述MySQL版本的SQL后,就能得到你期望的结果:
pID |name | city | key
542 |Z. Francis |Cansas | Z10-30
642 |Q. Snake |Cansas | Z10-25
内容的提问来源于stack exchange,提问作者Mashiba Sakuto
相关产品推荐
相关产品推荐

