MYSQL varchar数据类型排序

举报
小小张自由--张有博 发表于 2022/05/25 14:44:58 2022/05/25
【摘要】 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

a1.jpg


解决:

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

a2.jpg


使用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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。