在十进制之后用两个零转换oracle数据

时间:2016-09-26 05:19:04

标签: java sql oracle

我在Oracle中有一个要求。

Sample Data
-----------
345
34
23423

我希望输出像这样

Expected output
---------------
345.00
34.00
23423.00

查询可以是通用的,也可以是Oracle特有的。

可以使用oracle中的to_char函数,但是数据的长度超过25,因此to_char将在那里失败。

3 个答案:

答案 0 :(得分:1)

尝试使用类似

的内容

(注意:改编" 9"以获得具有最长编号的正确输出)

select a, to_char( a, '999999999990.00' ) from T;

|      A | TO_CHAR(A,'999999999990.00') |
|--------|------------------------------|
|    0.1 |                         0.10 |
|   0.02 |                         0.02 |
|      2 |                         2.00 |
|    2.2 |                         2.20 |
|   2.22 |                         2.22 |
|  10.22 |                        10.22 |
| 101.22 |                       101.22 |

SQL小提琴 http://sqlfiddle.com/#!4/6a168/6

编辑:这就是为什么我在开头放置NOTE,这取决于你的号码。 对于你的情况,你可以把

select to_char( 1234567891011121314, '9999999999999999990.00' ) from dual;

对于数字(32,2),可以是:

create table T ( a numeric(32,2) );
insert into T values( 123456789012345678901234567890.12 ); 

| TO_CHAR(A,'999999999999999999999999999990.00') |
|------------------------------------------------|
|              123456789012345678901234567890.12 |

答案 1 :(得分:1)

会很脏,但它对你有用。

to_char(number_value,'FM'||LPAD(9,38,9)||'.90')

使用MAX 38数字值作为格式模型。

with my_data(number_value) as
  (
    select 999999999999 from dual
    union 
    select 9 from dual
    union
    select .009 from dual
    union
    select .9 from dual
    union
    select 999 from dual
  )
  select to_char(number_value,'FM'||LPAD(9,38,9)||'.90') from my_data;

答案 2 :(得分:0)

使用此:

SELECT
   CAST(YOUR_COL as decimal(38,2)) as OUTPUT
FOM xyz

或google!