目录

  • 1. 方法一: `字段值 + 0`
  • 2. 方法二: 通过 `cast()` 函数
  • 3. 方法三: 通过 `CONVERT()` 函数

需要对接第三方统计系统,并且第三方系统给的数据那真的是一团乱,害,都是泪呀,头发又感觉凉飕飕的;数据有毒,所有的 小数都是用 varchar(20) 保存的,现在有要对该数据进行排序并展示。

示例数据:area_gdp 表

id area gdp
1 北京 1200
2 上海 6100
3 广州 6000
4 深圳 980
select * from area_gdp ORDER BY gdp ASC# 查询结果如下
1   北京      1200
3   广州  6000
2   上海      6100
4   深圳  980SELECT * FROM area_gdp ORDER BY gdp DESC
# 查询结果如下
4   深圳      980
2   上海      6100
3   广州      6000
1   北京      1200

结果与预想的不一样,其实 MySQL 没有想象中的那么智能,对于 char 或者是 varchar 类型的数据,只会当做字符串进行对待,所以会依次的对字符串中的每一个字符进行排序。

如果明确知道 char 或者是 varchar 里面保存的是数字类型,可以在排序的时候将字段转换成数字,并实现想要的排序功能;这里提供三种方法,如果有其他更好的可以互相交流一下。

示例数据:area_gdp 表

id area gdp
1 北京 1200
2 上海 6100
3 广州 6000
4 深圳 980

1. 方法一: 字段值 + 0

MySql 会根据上下文自动转换类型,这里会将被本来是字符类型的字段值以数值型返回,如果字段存放的值为数值字符,则会转换为数值型返回,如果字段存放的值为字母或者汉字,则直接返回 0

# 示例SELECT 'abd'+0  # 结果为 0
SELECT 'abd5'+0  # 结果为 0
SELECT '5abd'+0  # 结果为 5
SELECT '5abd5'+0 # 结果为 5
SELECT '55'+0 # 结果为 55
# 解决上面的问题select * from area_gdp ORDER BY gdp+0 ASC# 查询结果如下
4   深圳      980
1   北京      1200
3   广州      6000
2   上海      6100select * from area_gdp ORDER BY gdp+0 DESC
# 查询结果如下
2   上海      6100
3   广州      6000
1   北京      1200
4   深圳      980

2. 方法二: 通过 cast() 函数

CAST() 函数,把一个字段的值转成另一个类型并输出。
用法: CAST ( 字段名 AS 转换的类型 )

select * from area_gdp ORDER BY CAST(gdp AS SIGNED) ASC# 查询结果如下
4   深圳      980
1   北京      1200
3   广州      6000
2   上海      6100select * from area_gdp ORDER BY CAST(gdp AS SIGNED) DESC
# 查询结果如下
2   上海      6100
3   广州      6000
1   北京      1200
4   深圳      980
  • unsigned 表示无符号,不能表示小数
  • signed 表示有符号,可以表示小数

3. 方法三: 通过 CONVERT() 函数

CONVERT() 函数,把一个字段的值转成另一个类型并输出。
用法: CONVERT ( 字段名 , 转换的类型 )

select * from area_gdp ORDER BY CONVERT(gdp,SIGNED) ASC# 查询结果如下
4   深圳      980
1   北京      1200
3   广州      6000
2   上海      6100select * from area_gdp ORDER BY CONVERT(gdp,SIGNED) DESC
# 查询结果如下
2   上海      6100
3   广州      6000
1   北京      1200
4   深圳      980
  • unsigned 表示无符号,不能表示小数
  • signed 表示有符号,可以表示小数

博客地址:Roc’s Blog

MySQL 将字符串转换为数字类型并进行排序相关推荐

  1. mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...

    一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...

  2. TextBox字符串转换为数字类型

    int result = int.Parse(textBox1.Text): decimal result = decimal.Parse(textBox1.Text): 转载于:https://ww ...

  3. mysql 十六进制 转换为字符串_在MySQL中将十六进制字符串转换为数字?

    使用该CONV()方法将十六进制字符串转换为数字-select CONV(yourColumnName,16,10) AS anyAliasName from yourTableName; 让我们首先 ...

  4. Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)

    参考: http://c.biancheng.net/view/5112.html 在实际开发中我们往往需要对一些常用的数据类型进行转换,如 string . int . int64 . float ...

  5. Swift3.0语言教程字符串转换为数字值

    Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...

  6. c#语言中怎么样把文本转换成数字,如何将字符串转换为数字 - C# 编程指南 | Microsoft Docs...

    如何将字符串转换为数字(C# 编程指南) 02/16/2021 本文内容 你可以调用数值类型(int.long.double 等)中找到的 Parse 或 TryParse 方法或使用 System. ...

  7. JavaScript 将字符串转换为数字 – JS 字符串转 Int 示例

    JavaScript 将字符串转换为数字 – JS 字符串转 Int 示例 "John Doe" -> String 'John Doe' -> String &quo ...

  8. java 如何将数值型字符转换为数字_Java 如何将字符串转换为数字 专家详解

    在编程中我们经常需要进行各种数据类型之间的转换操作,下面将为您介绍如何将字符串转换为数字.首先我们需要了解各种数据类型的表示,String在java中为字符串类型,int在java中为整数类型,大小在 ...

  9. C语言实现将字符串转换为数字的方法

    C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型.长整型.浮点型等)的数字.以下是用atoi()函数将字符串转换为整数的一个例子: 代码如下: # include <stdio. h ...

最新文章

  1. 应用程序正常初始化(0xc0000135)失败的解决方法
  2. 挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim
  3. 正则表达式入门之使用元字符
  4. LeetCode 528. 按权重随机选择(前缀和+二分查找)
  5. OA,ERP等源码一部分演示
  6. Keil MDK从未有过的详细使用讲解
  7. 运筹优化(四)--线性规划之对偶问题和灵敏度分析
  8. 【EMNLP2020】“自言自语”来实现无监督常识问答
  9. DBeaver数据库可视化工具
  10. 2021计算机二级考试五月报名,2021年5月全国计算机等级考试报名时间
  11. [HAOI2009]毛毛虫(树的直径)
  12. Unity 基于图像处理的图像显示特效制作过场特效
  13. marshmallow之自定义Field
  14. 计算机主板品牌排行榜,电脑主板十大品牌排行榜
  15. 'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。
  16. bat 脚本修改IE浏览器代理服务器
  17. 总线概述及常见总线(转)
  18. unity编程实践-牧师与魔鬼动作分离版
  19. c语言程序 出圈游戏,【出圈】 (C语言代码)
  20. Windows系统上搭建私有云OwnCloud【保姆级别的教程】

热门文章

  1. FPGA高速收发器GTX/GTH关于外部参考时钟MGTREFCLK的设计
  2. python3使用timeit库做函数性能时间测试
  3. 十六倍数看视视频,无需会员,两行代码解决
  4. 昨天,微软加更.NET7中文手册,都有哪些新亮点?
  5. 如何解决开发板背光上电过快导致的闪屏和画面撕裂?
  6. 中国微电机行业需求规模与竞争格局研究报告2022版
  7. 离散数学学习笔记——第六讲——二元关系(4.1 序偶和笛卡儿积)
  8. 字节跳动笔试题02万万没想到之抓捕孔连顺
  9. Linux配置双网卡--静态路由
  10. linux sysrq使用方法,Linux中SysRq的使用[zt]