MySQL LIKE查询未返回LAMO10这类两位数结果的问题求助
解决MySQL查询无法返回LAMO10类记录的问题
你的查询结果取不到LAMO10,核心原因是empcode为字符串类型,按字符串规则排序时会逐位比较字符:LAMO9的第5位是9,LAMO10的第5位是1,9的ASCII码大于1,因此LAMO9会排在LAMO10前面,LIMIT 1自然只会返回前者。
要让LAMO10作为最大记录被返回,需要提取empcode中的数字部分并转换为数值类型后排序,以下是几种可行方案:
方案1:固定前缀提取数字(适配前缀为固定4位的LAMO)
SELECT empcode FROM employee WHERE empcode LIKE 'LAMO%' ORDER BY CAST(SUBSTRING(empcode, 5) AS UNSIGNED) DESC LIMIT 1;
SUBSTRING(empcode, 5)会跳过前4位的LAMO,截取后续的数字部分,转换为无符号整数后按数值降序排序,此时LAMO10会排在LAMO9之前。
方案2:替换前缀提取数字(适配前缀固定但长度可能变化的场景)
SELECT empcode FROM employee WHERE empcode LIKE 'LAMO%' ORDER BY CAST(REPLACE(empcode, 'LAMO', '') AS UNSIGNED) DESC LIMIT 1;
用REPLACE直接移除LAMO前缀,将剩余内容转为数值排序,逻辑更直观。
方案3:正则提取数字(适配前缀不固定但结尾为数字的场景,需MySQL 8.0+版本支持)
SELECT empcode FROM employee WHERE empcode LIKE 'LAMO%' ORDER BY CAST(REGEXP_SUBSTR(empcode, '[0-9]+') AS UNSIGNED) DESC LIMIT 1;
通过正则表达式匹配empcode中的数字片段,转换为数值后排序,兼容性更强,即使前缀后续有调整也能适用。
内容的提问来源于stack exchange,提问作者TECHNO SUBBU
相关产品推荐
相关产品推荐

