Mysql convert方法小记
2019-05-21 本文已影响0人
黄耀鸿
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
,但实测执行却报错。