mysql倒叙varchar类型的数字_MySql遇到varchar字段数字字符串排序问题
项目中遇到的问题,一个笔试试卷成绩查询最高分和最低分,简单的对分数字段排序,一直是正常的。
出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字段数字字符串排序问题相关推荐
- Java 汉字转拼音(倒叙显示,过滤字符,字母,有数字添加到末尾)
汉字转拼音(倒叙显示,过滤字符,字母,有数字添加到末尾) 第三方架包下载地址:https://sourceforge.net/projects/pinyin4j/files/ package a; i ...
- mysql varchar 2000能存_mysql 数据库 varchar 到底可以存多少数据呢,长文慎入
一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节),中文使用24位(三个字节) ...
- mysql查询字段不为数字_MySQL查询指定字段不是数字与逗号的sql
核心sql语句 MySQL查询不包含数字的语句: SELECT * FROM test WHERE `name` regexp '[^0-9]'; MySQL查询纯数字的语句: SELECT * FR ...
- mysql中的逻辑类型如何定义_MYSQL存储过程即常用逻辑知识点总结
Mysql存储过程 1.创建存储过程语法(格式) DELIMITER $ CREATE PROCEDURE 存储过程名A(IN 传入参数名a INT,IN 传入参数名b VARCHAR(20),OUT ...
- mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍_MySQL
日志文件类型 MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情: 日志文件 记入文件中的信息类型 错误日志 记录启动.运行或停止mysqld时出现的问题. 查询日志 记录建立的 ...
- mysql查询时间出来数字_mysql查询时间出来数字的解决方法
mysql查询时间出来数字的解决方法 发布时间:2020-11-16 10:50:29 来源:亿速云 阅读:108 作者:小新 这篇文章将为大家详细讲解有关mysql查询时间出来数字的解决方法,小编觉 ...
- mysql 把换行符全部删掉_mysql怎么去除字段中换行符与回车符
去掉mysql数据中的换行与回车符,解决方法: 复制代码 代码示例: update tablename set field = replace(replace(field, char(10), '') ...
- mysql字段类型详解_MySQL字段类型详解
MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...
- mysql数字_MySQL 中的数字类型
MySQL 中数据类型常用的就三大类: 数字类型/numeric types 日期和时间/date and time types 字符类型/string (character and byte) ty ...
最新文章
- python内置模块重要程度排名_论Python常见的内置模块
- cshrc设置 ic618_.cshrc一般在什么地方
- 复习1 - String,StringBuilder,StringBuffer的执行效率区别
- PHP调用扩展的三种方式:dl() .so ZendEngine
- sdut 1500 Message Flood
- 小程序遵循的语法_我如何构建一个遵循股市针对freeCodeCamp挑战的应用程序。
- C++/C--文件及函数注释【转载】
- SplitContainer如何实现左导航,右显示与导航相关内容
- findstr()与strfind()的区别
- Oracle EBS之把自定义concurrent加入Pick Release Document Set(All Pick Release Documents)的几个注意点...
- IPv4子网划分基础
- MySQL-快速入门(13)MySQL日志
- FlexSIM.ED v4.0 1CD(生产排程,虚拟管理,能力平衡软件)
- Tuxedo中间件调研
- Android POPWindow
- 【复习笔记】电分-第三章-电力系统潮流分析与计算
- Cross-Modality Domain Adaptation
- 中科院计算机研究所排名,中国科学院计算技术研究所
- 西门子服务器提升抱闸信号不输出,SINAMICS V90伺服抱闸接线及配置详解
- 为什么有时优盘是只读模式_u盘只读设置怎么弄? u盘只读设置使用方法
热门文章
- 如何开始一个深度学习项目
- 2021 互联网公司时薪排行榜出炉!微软、美团很不错
- 轨迹压缩文献阅读 TrajStore: An Adaptive Storage System for Very Large Trajectory Data Sets
- Leetcode每日一题:80.remove-duplicates-from-sorted-array-ii(删除排序数组中的重复项Ⅱ)
- 吴恩达机器学习:偏差与方差、欠拟合与过拟合
- 吴恩达机器学习与深度学习作业目录 [图片已修复]
- Django模型基础(三)——关系表的数据操作
- Android NDK开发: 通过C/C++调用第三方so库
- unity如何检测内存泄漏_如何排查Java内存泄漏?看懂这一篇就够用了
- java多级菜单列表怎么做_JAVA构造多级菜单