MySQL查询如何按Excel列名规则对结果排序
问题原因
MySQL默认对字符串做字典序排序,逐位对比字符ASCII值:只要第一位字符更小,不管字符串总长度多少都会排在前面,所以首字符为A的AA、AB会排在首字符为B的B前面,和Excel列名的排序逻辑不一致。
Excel列名的原生排序规则是:优先按列名的字符长度升序排列,长度相同的场景下再按字母顺序升序排列。
修改后的查询语句
直接在ORDER BY子句中优先按列名字段的长度排序,再按列名本身排序即可:
SELECT CellValue, Col, Row FROM cell WHERE Col != "A" ORDER BY LENGTH(Col) ASC, Col ASC;
可选兼容处理
如果你的Col字段存在大小写混合存储的情况(比如同时存了b和B),为了避免大小写ASCII值差异导致排序错乱,可以统一转大写后再做字母序排序,语句调整为:
SELECT CellValue, Col, Row FROM cell WHERE Col != "A" ORDER BY LENGTH(Col) ASC, UPPER(Col) ASC;
执行后返回的结果顺序就会是预期的B, C, ..., Z, AA, AB, AC...,和Excel原生列顺序完全一致。
内容的提问来源于stack exchange,提问作者M812_
相关产品推荐
相关产品推荐

