首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL字符串转数字三种方式

MySQL字符串转数字三种方式

作者头像
bisal
发布于 2023-04-27 15:00:22
发布于 2023-04-27 15:00:22
1.6K0
举报

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

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

代码语言:javascript
复制
select * from t01 order by c1;

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

代码语言:javascript
复制
select * from t01 order by substr(c1, 2);

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

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

(1)字段值 + 0

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

代码语言:javascript
复制
select * from t01 order by substr(c1, 2) + 0;

(2)CAST函数

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

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

代码语言:javascript
复制
select * from t01 order by cast(substr(c1, 2) as unsigned);

其中,

  • unsigned,表示无符号,不能表示小数。
  • signed,表示有符号,可以表示小数。
  • (3)CONVERT函数

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

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

代码语言:javascript
复制
select * from t01 order by convert(substr(c1, 2), unsigned);

其中,

  • unsigned,表示无符号,不能表示小数。
  • signed,表示有符号,可以表示小数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档