mysql> select * from a;
+------+-----------+
| id | num |
+------+-----------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
| 4 | 300 |
| 8 | NULL |
| 9 | NULL |
| 10 | 12312 |
| 10 | 123121231 |
| 10 | 123121231 |
+------+-----------+
9 rows in set (0.00 sec)
在MySQL使用过程中,有时我们需要对数据类型进行转换
,如将数据取整,或是将数据转换成字符串格式等,这种情况下我们可以直接调用类型转换函数实现这一功能。
数据类型转换可以采用CAST( 数据 as 类型 )
或 CONVERT(数据,类型 )
函数。
两个函数适用转换的类型有6个
函数 | 类型 |
---|---|
CHAR( ) | 字符型 |
DECIMAL(数值长度,精度/小数点保留长度) | 浮点型(float) |
SIGNED | 整数型(int) |
DATE | 日期 |
TIME | 时间 |
DATETIME | 日期时间型 |
使用效果如下
mysql> select cast(num as time) from a;
+-------------------+
| cast(num as time) |
+-------------------+
| 00:01:00 |
| 00:02:00 |
| 00:03:00 |
| 00:03:00 |
| NULL |
| NULL |
| 01:23:12 |
| NULL |
| NULL |
+-------------------+
9 rows in set, 2 warnings (0.00 sec)
mysql> select convert(num, time) from a;
+--------------------+
| convert(num, time) |
+--------------------+
| 00:01:00 |
| 00:02:00 |
| 00:03:00 |
| 00:03:00 |
| NULL |
| NULL |
| 01:23:12 |
| NULL |
| NULL |
+--------------------+
9 rows in set, 2 warnings (0.00 sec)
CAST/CONVER 函数与ROUND函数的区别:
ROUND函数
对于整数型
的数据,无法
强制转换为浮点型
,CAST/CONVER 函数
可以。
ROUND( 整数,精度):
mysql> select round(100,2);
+--------------+
| round(100,2) |
+--------------+
| 100 |
+--------------+
1 row in set (0.00 sec)
CAST( 整数,DECIMAL(长度,精度)):
mysql> select cast(100 as decimal(10,2));
+----------------------------+
| cast(100 as decimal(10,2)) |
+----------------------------+
| 100.00 |
+----------------------------+
1 row in set (0.00 sec)
ROUND( 字符串,精度):
mysql> select round('100',2);
+----------------+
| round('100',2) |
+----------------+
| 100.00 |
+----------------+
1 row in set (0.00 sec)
CAST( 字符串,DECIMAL(长度,精度)):
mysql> select cast('100' as decimal(10,2));
+------------------------------+
| cast('100' as decimal(10,2)) |
+------------------------------+
| 100.00 |
+------------------------------+
1 row in set (0.00 sec)
当我们希望将两列数据或两个值拼接
在一起时,可以使用CONCAT函数
使用如下
mysql> select concat('id: ',id) from a;
+-------------------+
| concat('id: ',id) |
+-------------------+
| id: 1 |
| id: 2 |
| id: 3 |
| id: 4 |
| id: 8 |
| id: 9 |
| id: 10 |
| id: 10 |
| id: 10 |
+-------------------+
9 rows in set (0.00 sec)
或
mysql> select concat(cast(num/100 as decimal(50,2)),'%') `num(%)` from a;
//这里将cast替换成round,convert都是可以的。
+----------------+
| num(%) |
+----------------+
| 1.00% |
| 2.00% |
| 3.00% |
| 3.00% |
| NULL |
| NULL |
| 123.12% |
| 1231212.31% |
| 1231212.31% |
+----------------+
9 rows in set (0.00 sec)