项目中遇到的问题,一个笔试试卷成绩查询最高分和最低分,简单的对分数字段排序,一直是正常的。

出bug了

就这个简单的功能,突然有一天,客户发现很奇怪的是最高分比最低分还低。

这明显是有问题的:

数据库大概是这样的: id name score 1 小明 32

2 小红 8

3 小王 40

4 小武 16

直接排序:

SELECT * FROM `exam_score` ORDER BY score DESC;

输出结果: id name score 2 小红 8

3 小王 40

1 小明 32

4 小武 16

一个存储成绩的表的分数score字段原本为int类型被修改为varchar类型后,原本正常的最高分最低分输出,变得不正确了。

原因

回溯找原因,原来这个score字段在当初是int字段,后来又一次小伙伴在笔试题库里加入了0.5分值的题目,为了兼容这个情况,很粗暴的把成绩字段也直接改为了varchar类型,而这个根据score字段排序的代码没有一起修改,那遇到这种情况,如何能正确的排序呢?

正确的使用varchar字段里的数字排序:

借助函数CONVERT(value as type),其中的type可选有如下几种类型,按需使用: DECIMAL:浮点数

SIGNED:整数

UNSIGNED:无符号整数

由于这里score可能出现小数,所以应该选用DECIMAL。 SELECT * FROM `exam_score` ORDER BY CONVERT(score,DECIMAL) DESC;

将字段转化为DECIMAL类型再排序,这样就可以了。

mysql存储小数更好的办法

这个问题其实是使用mysql存储小数的问题,直接使用字符串执行效率会降低,推荐方案: 使用乘以10的倍数来存储,比如价格以分(0.01元)为单位,乘以100后使用整数存储,不会丢失精度,也不会出现类似的排序问题。

使用decimal类型的方式存储。

将小数和整数部分分开存储。

参考

MySql遇到varchar字段数字字符串排序问题

更多精彩,敬请关注本博微信公众号:hsu1943

mysql倒叙varchar类型的数字_MySql遇到varchar字段数字字符串排序问题相关推荐

  1. Java 汉字转拼音(倒叙显示,过滤字符,字母,有数字添加到末尾)

    汉字转拼音(倒叙显示,过滤字符,字母,有数字添加到末尾) 第三方架包下载地址:https://sourceforge.net/projects/pinyin4j/files/ package a; i ...

  2. mysql varchar 2000能存_mysql 数据库 varchar 到底可以存多少数据呢,长文慎入

    一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节),中文使用24位(三个字节) ...

  3. mysql查询字段不为数字_MySQL查询指定字段不是数字与逗号的sql

    核心sql语句 MySQL查询不包含数字的语句: SELECT * FROM test WHERE `name` regexp '[^0-9]'; MySQL查询纯数字的语句: SELECT * FR ...

  4. mysql中的逻辑类型如何定义_MYSQL存储过程即常用逻辑知识点总结

    Mysql存储过程 1.创建存储过程语法(格式) DELIMITER $ CREATE PROCEDURE 存储过程名A(IN 传入参数名a INT,IN 传入参数名b VARCHAR(20),OUT ...

  5. mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍_MySQL

    日志文件类型 MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情: 日志文件 记入文件中的信息类型 错误日志 记录启动.运行或停止mysqld时出现的问题. 查询日志 记录建立的 ...

  6. mysql查询时间出来数字_mysql查询时间出来数字的解决方法

    mysql查询时间出来数字的解决方法 发布时间:2020-11-16 10:50:29 来源:亿速云 阅读:108 作者:小新 这篇文章将为大家详细讲解有关mysql查询时间出来数字的解决方法,小编觉 ...

  7. mysql 把换行符全部删掉_mysql怎么去除字段中换行符与回车符

    去掉mysql数据中的换行与回车符,解决方法: 复制代码 代码示例: update tablename set field = replace(replace(field, char(10), '') ...

  8. mysql字段类型详解_MySQL字段类型详解

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...

  9. mysql数字_MySQL 中的数字类型

    MySQL 中数据类型常用的就三大类: 数字类型/numeric types 日期和时间/date and time types 字符类型/string (character and byte) ty ...

最新文章

  1. python内置模块重要程度排名_论Python常见的内置模块
  2. cshrc设置 ic618_.cshrc一般在什么地方
  3. 复习1 - String,StringBuilder,StringBuffer的执行效率区别
  4. PHP调用扩展的三种方式:dl() .so ZendEngine
  5. sdut 1500 Message Flood
  6. 小程序遵循的语法_我如何构建一个遵循股市针对freeCodeCamp挑战的应用程序。
  7. C++/C--文件及函数注释【转载】
  8. SplitContainer如何实现左导航,右显示与导航相关内容
  9. findstr()与strfind()的区别
  10. Oracle EBS之把自定义concurrent加入Pick Release Document Set(All Pick Release Documents)的几个注意点...
  11. IPv4子网划分基础
  12. MySQL-快速入门(13)MySQL日志
  13. FlexSIM.ED v4.0 1CD(生产排程,虚拟管理,能力平衡软件)
  14. Tuxedo中间件调研
  15. Android POPWindow
  16. 【复习笔记】电分-第三章-电力系统潮流分析与计算
  17. Cross-Modality Domain Adaptation
  18. 中科院计算机研究所排名,中国科学院计算技术研究所
  19. 西门子服务器提升抱闸信号不输出,SINAMICS V90伺服抱闸接线及配置详解
  20. 为什么有时优盘是只读模式_u盘只读设置怎么弄? u盘只读设置使用方法

热门文章

  1. 如何开始一个深度学习项目
  2. 2021 互联网公司时薪排行榜出炉!微软、美团很不错
  3. 轨迹压缩文献阅读 TrajStore: An Adaptive Storage System for Very Large Trajectory Data Sets
  4. Leetcode每日一题:80.remove-duplicates-from-sorted-array-ii(删除排序数组中的重复项Ⅱ)
  5. 吴恩达机器学习:偏差与方差、欠拟合与过拟合
  6. 吴恩达机器学习与深度学习作业目录 [图片已修复]
  7. Django模型基础(三)——关系表的数据操作
  8. Android NDK开发: 通过C/C++调用第三方so库
  9. unity如何检测内存泄漏_如何排查Java内存泄漏?看懂这一篇就够用了
  10. java多级菜单列表怎么做_JAVA构造多级菜单