MYSQL varchar数据类型排序
【摘要】 MYSQL varchar数据类型排序
MYSQL中varchar:无法做排序
今天在工作中遇到了一点小问题,仔细的排查了一下,这里做一个问题的记录,现在整理了分享给大家,希望能对大家有所帮助
原因是varchar排序并不是简单的比大小,它是一个字符一个字符进行比较排序。varchar 类型字段排序, 会將数字当成字符串来处理. 排序规则一般是从左到右一位位来比较.
现象:
SELECT ui.chaoxing_name AS userName,
cld.user_id AS userId,
cld.details
FROM `arpro_course_learning_data` AS cld
LEFT JOIN arpro_user_info AS ui ON cld.user_id = ui.chaoxing_phone
WHERE cld.course_id = #{courseId}
AND cld.class_id = #{classId}
AND cld.type = #{type}
AND cld.version_id = #{version}
GROUP BY cld.user_id
ORDER BY cld.details DESC
解决:
SELECT
ui.chaoxing_name AS userName,
cld.user_id AS userId,
cld.details
FROM
`arpro_course_learning_data` AS cld
LEFT JOIN arpro_user_info AS ui ON cld.user_id = ui.chaoxing_phone
WHERE
cld.course_id = 223667994
AND cld.class_id = 55801751
AND cld.type = 'commit'
AND cld.version_id = 85
GROUP BY
cld.user_id
ORDER BY
CAST( details AS UNSIGNED INT ) DESC
使用case()函数
参考博客:https://blog.csdn.net/potatotamato/article/details/104764255/
https://blog.csdn.net/inexaustible/article/details/121514653
其他方案
1. order by (details+0) 运算之后获得的直接是int类型
2.order by CAST(resPrio as decimal) 利用cast函数直接转换,使用了本方案。
3. 修改数据类型
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)