【问题标题】:How to preserve leading zeros when converting to a decimal in oracle在 oracle 中转换为小数时如何保留前导零
【发布时间】:2018-11-21 12:02:59
【问题描述】:

我在 oracle 中运行以下查询。

WITH
ta AS (
     SELECT account_coid
        ,txn_id
        ,cbdev.cbzdt(effective_date) AS effective_date
        ,cbdev.cbchr(utl_raw.substr(txn_data, 113, 20)) AS CESG_amt
     FROM bs_transaction
     WHERE sub_type = 127469880)
SELECT
cast(ta.CESG_amt as DECIMAL (20,2)) AS cesg_amt
from ta 
inner join ....

在这里,我得到的结果 (cesg_amt) 为 -156.57。但我需要-0000000000156.57的结果。
我需要保留 - 的前导零(前导 0 以及小数点后的两位数)。

我在查询中尝试了to_char(ta.CESG_amt, '0000000000000.00') AS cesg_amt,但没有用。

能否请您帮我在 DECIMAL 字段中需要做什么才能得到如下结果。

【问题讨论】:

  • to_char() 应该做你想做的事。
  • to_char() 有什么用?当你使用它时会发生什么?此外,在 Oracle 中最常见的是使用 NUMBER 数据类型,而不是 DECIMAL。
  • @Boneist 当我在这种情况下使用 to_char() 时,我得到的值令人惊讶地为 0.00。我在调用 oracle 数据库的脚本中使用此查询。对可能出了什么问题有任何想法。
  • in a script with calls to the oracle db 什么样的脚本?一个unix脚本? SQLPlus 脚本?还有什么?如果您直接对数据库运行查询(例如在 SQLPLus/Toad/SQL Developer/等中)会发生什么?

标签: sql oracle decimal


【解决方案1】:

你可以使用这样的格式:

select to_char(-156.57,'fm0000000000000D00','NLS_NUMERIC_CHARACTERS = ''.,''')
       as Result
  from dual;

RESULT
-----------------
-0000000000156.57

【讨论】:

  • 感谢您的回答。基本上我在 shell 脚本中使用这个查询。但是当我以任何格式使用 to_char () 时,我得到的结果令人惊讶地为 0.00。任何想法。
  • @SatyanveshD 欢迎。也许您在脚本中将结果分配给长度不足的变量...可能是 number( x, 2) ...
  • 非常感谢。是的,你的逻辑是正确的。在脚本中,由于将结果分配给不同的变量,结果被截断。我已经浏览了整个脚本并现在将其删除。它现在可以与 to_char 函数一起正常工作。谢谢。
【解决方案2】:
  select to_char(-156.57,'000000000.00')
  from dual;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2021-12-16
    相关资源
    最近更新 更多