以下的文章主要是讲述Oracle小数点的实际保留问题如果你有相关的业务清单有提取要求的话我们需要使用到百分率通常的情况下需要对其保留两位小数其实我们只用round就可以实现(round(_data) )但是格式不是很工整
对格式要求不严谨的情况下使用round即可以下是网络搜索到的处理方法
方法一使用to_char的fm格式即
to_char(round(dataamount)FM) as amount
不足之处是如果数值是的话会显示为而不是
另一需要注意的是格式中Oracle小数点左边的个数要够多否则查询的数字会显示为n个符号#
解决方式如下
select decode(salary(to_char(round(salary)fm))) from can_do;
方法二使用case when then else end进行各种情况的判断处理
case
when instr(to_char(dataamount) ) < then
dataamount ||
when instr(to_char(dataamount) ) + = length(dataamount) then
dataamount ||
else
to_char(round(dataamount ))
end as amount_format
方法三可以使用Oracle自带的参数设置即
lumn amount format l
此方法的不足是format中的Oracle小数点左面的的个数要已知否则会出现超过的数字显示为########的情况
另外一个问题是使用column时设置生效是session级还是system级需要注意
也许某张表的数值列不总是要求所有的地方显示时都是Oracle小数点后两位的格式
此时只能使用session级但是有个数据库连接会话超时的问题如果不是使用到system级不建议使用该方法
方法四使用to_char+trim的方式如下
select trim(to_char()) from dual;
或者
select ltrim(trim(to_char())) from dual;
此处使用了个或者个的格式建议使用个的方式方便些方法四的不足之处是
如果数值是的话转化之后为而不是补救措施是decode一下
另一需要注意的是格式中Oracle小数点左边或者的个数要够多负责查询的数字会显示为n个符号#
如下
select decode
(salarytrim(to_char(salary))) from can_do;
或者
select decode
(salaryltrim(trim(to_char(salary)))) from can_do;
结论建议使用方法四中的trim+to_char的方式或者方法一的补救之后的方式而且最好使用Oracle小数点左边n个的方式不要使用的方式否则要多一步trim处理
即
select decode(salary
trim(to_char(salary))) from can_do;
或者
select decode(salary
(to_char(round(salary)fm))) from can_do;
以上的相关内容就是对Oracle小数点的保留问题的介绍望你能有所收获