Java 将oracle数据转换为十进制后的两个零
我对甲骨文有一个要求Java 将oracle数据转换为十进制后的两个零,java,sql,oracle,Java,Sql,Oracle,我对甲骨文有一个要求 Sample Data ----------- 345 34 23423 我希望输出像这样 Expected output --------------- 345.00 34.00 23423.00 查询可以是通用的,也可以是特定于Oracle的 可以使用oracle中的to_char函数,但数据长度超过25,因此to_char将在此处失败。使用以下方法: SELECT CAST(YOUR_COL as decimal(38,2)) as OUTPUT FOM x
Sample Data
-----------
345
34
23423
我希望输出像这样
Expected output
---------------
345.00
34.00
23423.00
查询可以是通用的,也可以是特定于Oracle的
可以使用oracle中的to_char函数,但数据长度超过25,因此to_char将在此处失败。使用以下方法:
SELECT
CAST(YOUR_COL as decimal(38,2)) as OUTPUT
FOM xyz
或者谷歌 试试像这样的东西 注意:调整数字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小提琴
编辑:这就是为什么我会在开头加上注释,这取决于你的号码。
对于你的情况,你可以
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 |
会很脏,但它对你有用
to_char(number_value,'FM'||LPAD(9,38,9)||'.90')
使用最大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;
我试着用它来施法。。但问题是数据的长度是不同的。为什么不在Java代码中使用DecimalFormat类?这就是问题所在,我正在对数据进行SQOOP并将其转储到HDFS中。因此,唯一可用的选项是使用sql查询。我不想在它上面运行一个额外的MapReduce来转换数据。它的可能副本不是上述问题的副本。我在列中有长度超过20的数据。我需要在小数点后加一个二零。to_char函数指定的可能性999有一个限制。你能试试吗?我试着选择CAST456作为小数38,2作为双精度输出;结果是456。我想要的是456.00。有趣的是,它在我的ORA系统上是正确的。这一定是某种数据库配置。感谢您的反馈。从dual选择至_char 123456789101121314,“999999999 0.00”;你现在能试试吗?我无法预测值的长度。架构中给出的大小为32,2,这意味着可以存储大小为32的值。选择“将字符9875466666666666623165465465456456456456466456665456456456456645644564445,'99999999999999999999999999999999999999999'作为双精度中的金额;在这种情况下,这将不起作用。这已超过Oracle的数字类型精度限制。您将无法使用您提到的值将数据存储在表中。而且,这个解决方案实际上与后来被接受的解决方案完全相同。唯一的区别就是答案是使用lpad为numeric32,2伟人构建了一长串9悲伤的示例。。我一直在寻找这样的解决方案。非常感谢……对于| charnumber | u value,'FM'| | | LPAD9,38,9 | | |'.90'对我来说非常有用。请解释一下“FM”| | LPAD9,38,9 | | |“.90”的含义,例如LPADA,5,A=aaaaaaa 5次。。我正在形成长度格式model9999999。。布拉布拉,用这个。