Mysql 是一款关系型数据库,可以存储结构化的数据。今天介绍下 Mysql 提供的一个转换类型的方法CONVERT;
CONVERT(expr,type)能把字段转成指定类型,其中type可填类型如下,和CAST(expr AS type)功能一样,如SELECT CONVERT("2017-08-29", DATE),对于字符字段排序select * from user order by cast(age as UNSIGNED) asc;;
如果age字段是char 类型存储,select * from user order by age asc;输出结果如下:
| name | age |
|---|---|
| Li | 1 |
| Zhang | 10 |
| Huang | 2 |
这可能不是我们想要的,我们希望按数值来排,这时可以转下类型,使用select * from user order by cast(age as UNSIGNED) asc; 结果如下:
| name | age |
|---|---|
| Li | 1 |
| Huang | 2 |
| Zhang | 10 |
CONVERT(expr,type)中type可填类型如下:
| type类型(中括号表选填) | 说明 | 示例 | |
|---|---|---|---|
| BINARY[(N)] | 二进制 |
SELECT CONVERT("abcde", BINARY(3)) AS num输出是abc |
|
| CHAR[(N)] [charset_info] | 字符 |
SELECT CONVERT("abcde", CHAR(10)) AS num输出abcde,注意长度不足10不会在后面补空格 |
|
| DATE | 没有时间的日期,如2019-05-21 | SELECT CONVERT("2017-08-29", DATE);输出:2017-08-29 | |
| DATETIME | 日期时间,如2019-05-21 17:00:00 |
SELECT CONVERT("2019-08-01", DATETIME);输出2019-08-01 00:00:00
|
|
| TIME | 去掉日期的时间,如17:00:00
|
SELECT CONVERT("2017-08-01 01:01:01", TIME) ;输出01:01:01
|
|
| DECIMAL[(M[,D])] | 小数,M是总位数(包含小数位数),D 是小数位数 |
SELECT CONVERT(9999.9999, DECIMAL(3,2)) AS num 输出是9.99 |
|
| SIGNED [INTEGER] | 有符号 Integer |
SELECT CONVERT(-9999.5099, SIGNED) AS num输出-10000 |
|
| UNSIGNED [INTEGER] | 无符号 Integer |
SELECT CONVERT(9999.5099, UNSIGNED) AS num输出10000
|
补充,官方文档说type可以转成DOUBLE、FLOAT,但实测执行却报错。
