Oracle11g 在Oracle中如何将列强制转换为不同有效数字的十进制
我有一个以###0.0000000000格式存储的列。在我生成的报告中,我需要它只显示几个有效数字。问题是基于产品需要更改的数量,默认值为2。另一个表中有一列提供每个产品所需的数字 到目前为止,我尝试了一些方法,但它似乎不喜欢,并抛出了一个语法错误Oracle11g 在Oracle中如何将列强制转换为不同有效数字的十进制,oracle11g,Oracle11g,我有一个以###0.0000000000格式存储的列。在我生成的报告中,我需要它只显示几个有效数字。问题是基于产品需要更改的数量,默认值为2。另一个表中有一列提供每个产品所需的数字 到目前为止,我尝试了一些方法,但它似乎不喜欢,并抛出了一个语法错误 Cast(A.Price as Numeric(10,coalesce(B.Sig_Digits,2))) 这引发了一个错误,因此我尝试将合并部分设置为列并对其进行别名处理,以防合并破坏它,但这也不起作用。Round将使用列作为参数,但我不希望它进
Cast(A.Price as Numeric(10,coalesce(B.Sig_Digits,2)))
这引发了一个错误,因此我尝试将合并部分设置为列并对其进行别名处理,以防合并破坏它,但这也不起作用。Round将使用列作为参数,但我不希望它进行取整。除了一个丑陋的
case when Sig_digits = 1 then to_char(price,'###0.0') when Sig_digits = 2...
等等,还有什么其他选择?这是一个非常大的报告,有100多列和几百万行,所以我不希望在需要时这样做 使用
TO_CHAR
和RPAD
将0
s添加到格式模型末尾的正确小数位数:
Oracle 11g R2架构设置:
CREATE TABLE table_name ( value, sig ) AS
SELECT 123.456789, 2 FROM DUAL UNION ALL
SELECT 123456789.123456789, 7 FROM DUAL;
SELECT TO_CHAR( value, RPAD( 'FM999999999990.', sig + 15, '0' ) )
FROM table_name
| TO_CHAR(VALUE,RPAD('FM999999999990.',SIG+15,'0')) |
|---------------------------------------------------|
| 123.46 |
| 123456789.1234568 |
查询1:
CREATE TABLE table_name ( value, sig ) AS
SELECT 123.456789, 2 FROM DUAL UNION ALL
SELECT 123456789.123456789, 7 FROM DUAL;
SELECT TO_CHAR( value, RPAD( 'FM999999999990.', sig + 15, '0' ) )
FROM table_name
| TO_CHAR(VALUE,RPAD('FM999999999990.',SIG+15,'0')) |
|---------------------------------------------------|
| 123.46 |
| 123456789.1234568 |
:
CREATE TABLE table_name ( value, sig ) AS
SELECT 123.456789, 2 FROM DUAL UNION ALL
SELECT 123456789.123456789, 7 FROM DUAL;
SELECT TO_CHAR( value, RPAD( 'FM999999999990.', sig + 15, '0' ) )
FROM table_name
| TO_CHAR(VALUE,RPAD('FM999999999990.',SIG+15,'0')) |
|---------------------------------------------------|
| 123.46 |
| 123456789.1234568 |
请更新您的问题,以提供示例输入数据和预期输出。