Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 在Oracle中如何将列强制转换为不同有效数字的十进制_Oracle11g - Fatal编程技术网

Oracle11g 在Oracle中如何将列强制转换为不同有效数字的十进制

Oracle11g 在Oracle中如何将列强制转换为不同有效数字的十进制,oracle11g,Oracle11g,我有一个以###0.0000000000格式存储的列。在我生成的报告中,我需要它只显示几个有效数字。问题是基于产品需要更改的数量,默认值为2。另一个表中有一列提供每个产品所需的数字 到目前为止,我尝试了一些方法,但它似乎不喜欢,并抛出了一个语法错误 Cast(A.Price as Numeric(10,coalesce(B.Sig_Digits,2))) 这引发了一个错误,因此我尝试将合并部分设置为列并对其进行别名处理,以防合并破坏它,但这也不起作用。Round将使用列作为参数,但我不希望它进

我有一个以###0.0000000000格式存储的列。在我生成的报告中,我需要它只显示几个有效数字。问题是基于产品需要更改的数量,默认值为2。另一个表中有一列提供每个产品所需的数字

到目前为止,我尝试了一些方法,但它似乎不喜欢,并抛出了一个语法错误

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 |

请更新您的问题,以提供示例输入数据和预期输出。