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

MySQL 将字符串转换为数字类型并进行排序起因:需要对接第三方统计系统,并且第三方系统给的数据那真的是一团乱,害,都是泪呀,头发又感觉凉飕飕的;数据有毒,所有的小数都是用varchar(20)保存的,现在有要对数据进行排序并展示。示例数据:area_gdp表idareagdp1北京12002上海61003广州60004深圳980select*fromarea_gdpORDERBYgdpASC#查询结果如下1 北京 12003 广州 60002 上海

大家好,又见面了,我是你们的朋友全栈君。

需要对接第三方统计系统,并且第三方系统给的数据那真的是一团乱,害,都是泪呀,头发又感觉凉飕飕的;数据有毒,所有的
小数都是用
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	深圳 	980

SELECT * 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	上海		6100

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

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

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

select * from area_gdp ORDER BY CAST(gdp AS SIGNED) ASC

# 查询结果如下
4	深圳		980
1	北京		1200
3	广州		6000
2	上海		6100

select * 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	上海		6100

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

博客地址:Roc’s Blog

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145085.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图片加载失败的正确处理[通俗易懂]

    图片加载失败的正确处理[通俗易懂]<imgsrc=”http://imgsrc.baidu.com/forum/pic/item/fd1f4134970a304e16d3176ad3c8a786c8175ca8.jpg”/>对于这样一段代码来讲,如果该图片加载成功,那么界面上会显示图片,如果由于一些原因导致图片加载失败,会出现这样的图标。在正常的项目中,标签的src是后端返回的路径,如果图片加载不出来,显示上…

    2022年5月6日
    118
  • 四种黑盒测试方法_八大心态的总结怎么写

    四种黑盒测试方法_八大心态的总结怎么写一、等价类划分法1.定义2.划分等价类2.1有效等价类2.2无效等价类3.划分等价类的标准4.划分等价类的方法5.设计测试用例6.三角形实例二、边界值分析法1.定义2.与等价划分的区别3.边界值分析方法的考虑4.常见的边界值5.边界值分析6.基于边界值分析方法选择测试用例的原则7.实例说明8、三角形问题的边界值分析测试用例三、错误推测方法1.定义2.错误推测方法的基本思想:四、因果图方法1.定义2.因果图法产生的背景:3.因果图介绍4.因果图概念5.采用因果图法设计测试用例的步.

    2022年10月3日
    0
  • Linux部署redis_weblogic部署Linux

    Linux部署redis_weblogic部署Linux前言网上搜索了一筐如何在Linux下安装部署Redis的文章,各种文章混搭在一起勉强安装成功了。自己也记录下,方便后续安装时候有个借鉴之处。Redis版本5.0.4 服务器版本LinuxCentOS7.664位下载Redis进入官网找到下载地址Redis右键Download按钮,选择复制链接。进入到Xshell控制台(默认当前是root根目录),输入wget将上面复制的下载链接粘贴上,如下命令: 1 wgethttp://down.

    2022年10月4日
    0
  • get请求与post提交区别的简易理解

    get请求与post提交区别的简易理解

    2021年7月16日
    64
  • dumpbin options「建议收藏」

    dumpbin options「建议收藏」dumpbin.exexx.exe /options >x:\\xx.txtoptions:  /ALL  /ARCHIVEMEMBERS  /CLRHEADER  /DEPENDENTS  /DIRECTIVES  /DISASM[:{BYTES|NOBYTES}]  /ERRORREPORT:{NONE|PROMPT|QUE

    2022年6月19日
    24
  • ubuntu18.04安装opencv教程_Ubuntu18安装opencv

    ubuntu18.04安装opencv教程_Ubuntu18安装opencv最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅。本教程原为3.3.0,但经过博主亲测,3.4.0、3.4.1皆适用1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工。下载链接http://opencv.org/releases.html,选择sources版本2.解压下…

    2022年9月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号