使用TO_CHAR的方式,有两个弊端,也是需要注意的地方:
1>整数部分的9要写的足够多,否则会错误显示,如下:
错误:SELECT TO_CHAR(199999999.1256,'9,999.99') FROM DUAL --显示结果:#########
正确:SELECT TO_CHAR(199999999.1256,'999,999,999.99') FROM DUAL --显示结果:199,999,999.13
2>对0这种情况要单独处理,当为0时,会显示为.00,而非0.00。如下:
错误:SELECT TO_CHAR(0,'9,99.99') FROM DUAL --显示结果:.00
正确:SELECT DECODE(0,0,'0.00',TO_CHAR(199999999.1256,'999,999,999.99')) FROM DUAL --显示结果:0.00
以下为保留小数处理的相关函数:
一、ROUND(四舍五入):ROUND( number, [ decimal_places ] )
描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果。
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
参数:
number : 欲处理之数值
decimal_places : 四舍五入 , 小数取几位 ( 预设为 0 )
示例 :
select round(123.456, 0) from dual; 回传 123
select round(123.456, 1) from dual; 回传 123.5
select round(123.456, 2) from dual; 回传 123.46
select round(123.456, 3) from dual; 回传 123.456
select round(-123.456, 2) from dual; 回传 -123.46
当然,保留两位小数的处理,在格式要求的不是很严格的条件下,也可以用round函数。
在保留小数这个问题上round函数有以下弊端:
①当为整数时,无论如何写,最终返回的都是整数,如下:
SELECT ROUND(199.000,2) FROM DUAL --199
②返回值中不会自带千分符,如下:
SELECT ROUND(199999.2356,2) FROM DUAL --199999.24
二、DECODE:DECODE(input_value,value,result[,value,result…][,default_result])
描述:DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
DECODE(input_value,value,result[,value,result…][,default_result]);
参数:
input_value 试图处理的数值。
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可用关键字NULL于之对应。
result 是一组成序偶的结果值。
default_result 未能与任何一序偶匹配成功时,函数返回的默认值。
示例:
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup;