如果需要指定小数的输出格式,则需要使用下面几个函数:
- FORMAT(xxx,yyy,zzz)指定xxx有yyy个小数。但是这个函数有个特点,就是整数部分每三个数字就会用分隔符隔开(从小数点左边第一个数开始算的),如果不写zzz这个参数,即只有两个参数,就会以,作为分隔符了。例如45000,如果利用FORMAT(45000,2),最后得到的是45,000.00的形式,再例如FORMAT(45000,4),得到的是45,000.0000
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))
-> 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,并没有逗号隔开.
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 的时候,依旧是按照数字进行排序的。
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)
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)
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)
这一题中就有讲到输出的格式:考试分数(一)
|