如果需要指定小数的输出格式,则需要使用下面几个函数:
- FORMAT(xxx,yyy,zzz)指定xxx有yyy个小数。但是这个函数有个特点,就是整数部分每三个数字就会用分隔符隔开(从小数点左边第一个数开始算的),如果不写zzz这个参数,即只有两个参数,就会以,作为分隔符了。例如45000,如果利用FORMAT(45000,2),最后得到的是45,000.00的形式,再例如FORMAT(45000,4),得到的是45,000.0000
# 利用FORMAT,从而指定小数最后保留多少个小数点,同时从小数点左边第一个数字往左算,每三个数字
# 就会有一个分隔符.注意的是,原本FORMAT()有三个参数,如果不写zzz这个参数,就会默认用','作
# 为分隔符
mysql> SELECT
-> name,
-> FORMAT(salary,4)
-> FROM employee2;
+-----------+------------------+
| name | FORMAT(salary,4) |
+-----------+------------------+
| 小肖 | 30,000.0000 |
| 小东 | 40,000.0000 |
| 小非 | 23,456.0000 |
| 晓飞 | 15,000.0000 |
| 小林 | 24,000.0000 |
| 小五 | 4,500.0000 |
| 张山 | 40,000.0000 |
| 小肖 | 35,000.0000 |
| 李四 | 50,000.0000 |
| 王武 | 56,000.0000 |
| 猪小屁 | 56,000.0000 |
| 小玉 | 58,000.0000 |
| 小张 | 50,000.0000 |
| 小胡 | 25,000.0000 |
| 小肖 | 35,000.0000 |
| 小林 | 20,000.0000 |
+-----------+------------------+
16 rows in set (0.00 sec)
- CAST(xxx AS decimal(12,yyy)):指定xxx有yyy个小数.作用和CONVERT()一样,指定xxx有yyy个小数,但是和FORMAT()不同,他并不会每3个数字就用逗号隔开,例如45000,指定输出3个小数,则CONVERT(45000,DECIMAL(12,3)),将会输出45000.0,并没有逗号隔开.
mysql> SELECT
-> name,
-> CAST(salary AS DECIMAL(12,3)) -- 使用CAST,这时候相当于CONVERT一样,指定有多少个小数,并且不会出现分隔符
-> FROM employee2;
+-----------+-------------------------------+
| name | CAST(salary AS DECIMAL(12,3)) |
+-----------+-------------------------------+
| 小肖 | 30000.000 |
| 小东 | 40000.000 |
| 小非 | 23456.000 |
| 晓飞 | 15000.000 |
| 小林 | 24000.000 |
| 小五 | 4500.000 |
| 张山 | 40000.000 |
| 小肖 | 35000.000 |
| 李四 | 50000.000 |
| 王武 | 56000.000 |
| 猪小屁 | 56000.000 |
| 小玉 | 58000.000 |
| 小张 | 50000.000 |
| 小胡 | 25000.000 |
| 小肖 | 35000.000 |
| 小林 | 20000.000 |
+-----------+-------------------------------+
16 rows in set (0.00 sec)
- CONVERT(xxx,DECIMAL(12,yyy)):指定xxx有yyy个小数,但是和FORMAT()不同,他并不会每3个数字就用逗号隔开,例如45000,指定输出3个小数,则CONVERT(45000,DECIMAL(12,3)),将会输出45000.0,并没有逗号隔开.
# 利用CONVERT,在指定有多少个小数的同时,不会出现逗号这样的分隔符,即从小数点左边的第一个数
# 字开始算,每三个数字并不会向FORMAT一样出现分隔符
mysql> SELECT
-> name,
-> CONVERT(salary,DECIMAL(12,3))
-> FROM employee2;
+-----------+-------------------------------+
| name | CONVERT(salary,DECIMAL(12,3)) |
+-----------+-------------------------------+
| 小肖 | 30000.000 |
| 小东 | 40000.000 |
| 小非 | 23456.000 |
| 晓飞 | 15000.000 |
| 小林 | 24000.000 |
| 小五 | 4500.000 |
| 张山 | 40000.000 |
| 小肖 | 35000.000 |
| 李四 | 50000.000 |
| 王武 | 56000.000 |
| 猪小屁 | 56000.000 |
| 小玉 | 58000.000 |
| 小张 | 50000.000 |
| 小胡 | 25000.000 |
| 小肖 | 35000.000 |
| 小林 | 20000.000 |
+-----------+-------------------------------+
16 rows in set (0.00 sec)
此外,上面三个函数除了分隔符区别外,还有的是在ORDER BY方面,因为FORMAT得到的是一个字符串,所以利用ORDER BY 的时候,此时是基于字典顺序进行排序的,而CONVERT\CAST得到的是一个数字,所以利用ORDER BY 的时候,依旧是按照数字进行排序的。
# 利用CAST,然后利用这个列进行排序输出,由于CAST得到的是一个数字,所以利用ORDER BY
# 的时候,就是按照数字大小进行排序的
mysql> SELECT
-> name,
-> CAST(salary AS DECIMAL(12,3)) AS cast_salary
-> FROM employee2
-> ORDER BY cast_salary;
+-----------+-------------+
| name | cast_salary |
+-----------+-------------+
| 小五 | 4500.000 |
| 晓飞 | 15000.000 |
| 小林 | 20000.000 |
| 小非 | 23456.000 |
| 小林 | 24000.000 |
| 小胡 | 25000.000 |
| 小肖 | 30000.000 |
| 小肖 | 35000.000 |
| 小肖 | 35000.000 |
| 小东 | 40000.000 |
| 张山 | 40000.000 |
| 李四 | 50000.000 |
| 小张 | 50000.000 |
| 王武 | 56000.000 |
| 猪小屁 | 56000.000 |
| 小玉 | 58000.000 |
+-----------+-------------+
16 rows in set (0.00 sec)
# 利用FORMAT,然后利用这个列进行排序输出,由于FORMAT得到的是一个字符串,所以利用ORDER BY
# 的时候,就是按照字典顺序进行排序的
mysql> SELECT
-> name,
-> FORMAT(salary,3) AS format_salary
-> FROM employee2
-> ORDER BY format_salary;
+-----------+---------------+
| name | format_salary |
+-----------+---------------+
| 晓飞 | 15,000.000 |
| 小林 | 20,000.000 |
| 小非 | 23,456.000 |
| 小林 | 24,000.000 |
| 小胡 | 25,000.000 |
| 小肖 | 30,000.000 |
| 小肖 | 35,000.000 |
| 小肖 | 35,000.000 |
| 小五 | 4,500.000 |
| 小东 | 40,000.000 |
| 张山 | 40,000.000 |
| 李四 | 50,000.000 |
| 小张 | 50,000.000 |
| 王武 | 56,000.000 |
| 猪小屁 | 56,000.000 |
| 小玉 | 58,000.000 |
+-----------+---------------+
16 rows in set (0.00 sec)
# 利用CONVERT,然后利用这个列进行排序输出,由于CONVERT得到的是一个数字,所以利用ORDER BY
# 的时候,就是按照数字大小进行排序的
mysql> SELECT
-> name,
-> CONVERT(salary,DECIMAL(12,3)) AS convert_salary
-> FROM employee2
-> ORDER BY convert_salary;
+-----------+----------------+
| name | convert_salary |
+-----------+----------------+
| 小五 | 4500.000 |
| 晓飞 | 15000.000 |
| 小林 | 20000.000 |
| 小非 | 23456.000 |
| 小林 | 24000.000 |
| 小胡 | 25000.000 |
| 小肖 | 30000.000 |
| 小肖 | 35000.000 |
| 小肖 | 35000.000 |
| 小东 | 40000.000 |
| 张山 | 40000.000 |
| 李四 | 50000.000 |
| 小张 | 50000.000 |
| 王武 | 56000.000 |
| 猪小屁 | 56000.000 |
| 小玉 | 58000.000 |
+-----------+----------------+
16 rows in set (0.00 sec)
这一题中就有讲到输出的格式:考试分数(一)