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)