MySQL字符串转数字三种方式
作者:mmseoamin日期:2023-12-18

MySQL数据表t的c1列是varchar字符串类型,存储如下记录,

MySQL字符串转数字三种方式,789610ef056cad56bdc19acbfbec0e4f.png,第1张

如果按照"T+数字"中的"数字"排序,常规的操作order by c1,执行是错误的,实际上按照字符串的ASCII排序的,

select * from t01 order by c1;

MySQL字符串转数字三种方式,95cddf373064d019059fad9b976ba7eb.png,第2张

如果顺着想,字符串截取出"T+数字"中的"数字"排序,

select * from t01 order by substr(c1, 2);

还是不对的,因为本质上,还是按照字符串进行的排序,

MySQL字符串转数字三种方式,8e804746b47e342aae0d622c1f9f2216.png,第3张

针对这个需求,可以有三种方案,

(1)字段值 + 0

MySQL会根据上下文自动转换类型,通过"字段值+0",可以将原本是字符类型的字段值以数值型返回,

select * from t01 order by substr(c1, 2) + 0;

MySQL字符串转数字三种方式,b317f8d1a508bd15dc83127fbc09b07c.png,第4张

(2)CAST函数

CAST()函数可以将一个字段的值转成另一个类型并输出。 

语法:CAST(字段名 AS 转换的类型)

select * from t01 order by cast(substr(c1, 2) as unsigned);

MySQL字符串转数字三种方式,a5181f92e4ed47ef6455c4ac815fd311.png,第5张

其中,

  • unsigned,表示无符号,不能表示小数

  • signed,表示有符号,可以表示小数。

  • (3)CONVERT函数

    CONVERT()函数,将一个字段的值转成另一个类型并输出。

    语法:CONVERT(字段名, 转换的类型)

    select * from t01 order by convert(substr(c1, 2), unsigned);

    MySQL字符串转数字三种方式,742958d6c7a29a2bb52e3d126381fc91.png,第6张

    其中,

    • unsigned,表示无符号,不能表示小数。

    • signed,表示有符号,可以表示小数。

    • 如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

    • MySQL字符串转数字三种方式,692756c99d21d356d70d9e6fe2c95caa.png,第7张

    • 近期更新的文章:

    • 《工体首战印象》

    • 《中超各主场巡礼(国安观赛指南)》

    • 《Oracle数据库升级对UTL_FILE的影响》

    • 《MySQL架构中存储引擎的介绍》

    • 《参加数据技术嘉年华大会有感》

    • 近期的热文:

    • 《推荐一篇Oracle RAC Cache Fusion的经典论文》

    • 《"红警"游戏开源代码带给我们的震撼》

    • 文章分类和索引:

    • 《公众号1200篇文章分类和索引》