Oracle小数点的实际保留问题的4方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle小数点的实际保留问题的4方案相关的知识,希望对你有一定的参考价值。

参考技术A

  以下的文章主要是讲述Oracle小数点的实际保留问题 如果你有相关的业务清单有提取要求的话 我们需要使用到百分率 通常的情况下 需要对其保留两位小数 其实我们只用round就可以实现(round(_data ) ) 但是格式不是很工整

  对格式要求不严谨的情况下使用round即可 以下是网络搜索到的处理方法

   方法一 使用to_char的fm格式

   to_char(round(data amount ) 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(data amount) ) < then

   data amount ||

   when instr(to_char(data amount) ) + = length(data amount) then

   data amount ||

   else

   to_char(round(data amount ))

   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

  (salary trim(to_char(salary ))) from can_do;

  或者

   select decode

  (salary ltrim(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;

lishixinzhi/Article/program/Oracle/201311/18607

oracle 聚合函数求和后,小数点前面的零不显示

如 SUM(金额) as 收入 ,使用TO_CHAR(收入,'9999990.999')后小数点前面的零还是不显示,TO_CHAR(SUM(金额),'9999990.999')也不行

你的 Oracle 版本是多少呀?

我这里测试了, 你那种写法,是没有问题的啊。



CREATE TABLE test_tochar(
  id INT,
  val decimal(10,4)
);
INSERT INTO test_tochar VALUES(1,   0.0001);
INSERT INTO test_tochar VALUES(2,   0.0012);
INSERT INTO test_tochar VALUES(3,   0.0123);
INSERT INTO test_tochar VALUES(4,   0.1234);
INSERT INTO test_tochar VALUES(5,   1.2345);
INSERT INTO test_tochar VALUES(6,   12.3456);
INSERT INTO test_tochar VALUES(7,   123.4567);
INSERT INTO test_tochar VALUES(8,   1234.5678);
INSERT INTO test_tochar VALUES(9,   12345.6789);
默认的显示方式。
SQL> COLUMN "Result" FORMAT A15
SQL> SELECT id, TO_CHAR(val) Result FROM test_tochar;
        ID RESULT
---------- ---------------
         1 .0001
         2 .0012
         3 .0123
         4 .1234
         5 1.2345
         6 12.3456
         7 123.4567
         8 1234.5678
         9 12345.6789
已选择9行。
注意到, 小于 1 的数据, 被 to_char 成   .0001 了。 而不是  0.0001
修改 TO_CHAR 的格式化参数:
SQL> SELECT id, TO_CHAR(val, \'999,990.999\') Result FROM test_tochar;
        ID RESULT
---------- ---------------
         1        0.000
         2        0.001
         3        0.012
         4        0.123
         5        1.235
         6       12.346
         7      123.457
         8    1,234.568
         9   12,345.679
已选择9行。

参考技术A pl/sql设置的问题,工具-——首选项——窗口类型——sql 窗口,不勾选
"数字字段 to char“。
参考技术B 把你语句写全了,我给你改,这个你用to_char没法解决,得用连接字符串的方式搞定
比如
case when 收入 like '.%' then '0'||收入 else 收入 end
这样的方式本回答被提问者和网友采纳

以上是关于Oracle小数点的实际保留问题的4方案的主要内容,如果未能解决你的问题,请参考以下文章

oracle 保留小数问题

oracle保留两位小数

oracle:求百分比,保留小数点后两位,不会出现.01的情况,也不会出现#######的情况,写一条sql语句

oracle语句中,某个段值想四舍五入,并且保留小数点的后2位,是否有函数可以直接写出来;

oracle语句中,某个段值想四舍五入,并且保留小数点的后2位,是否有函数可以直接写出来;

Oracle数据库中的如何保留两位小数 并且在java中保留两位小说插入数据表中