【问题标题】:Currency column with no decimals: add in decimal没有小数的货币列:添加小数
【发布时间】:2017-08-24 18:20:17
【问题描述】:

我一直在查看没有小数位的货币列。这是加载到我们的 Oracle 数据库中的遗留系统的输出。

如果字段包含三个或更多数字,则它应该在右边三个空格处有一个小数。

如果值少于三个数字,它应该有一个小数和一个前导零。

例如:

  • 2050 应转换为 2.050
  • 110 应转换为 .110
  • 50 应转换为 0.050

我尝试过使用强制转换,但收到错误“无效数据类型”。

这是一个基本的选择语句:

    select 
    customer_id
    cast(ENDING_BALANCE as (decimal(10,3)) as Bal_1
    from Current_Balances

任何建议将不胜感激。

【问题讨论】:

  • 你在小数点之前有一个额外的括号。试试cast(ENDING_BALANCE as decimal(10,3))
  • 感谢@scsimon 的捕获。这次它运行了,但没有添加小数。
  • 输入的数据类型是什么?它们是 NUMBER 还是 VARCHAR2?结果的所需数据类型是什么 - NUMBER 或 VARCHAR2?

标签: sql oracle casting decimal currency


【解决方案1】:

我认为您需要将其转换为一个数字并除以 1000

SELECT CAST(CAST('2050' as INT)/1000 as DECIMAL(10,3)) FROM DUAL

如果你真的想让输出格式看起来像那样,你需要 TO_CHAR

SELECT LTRIM(TO_CHAR(CAST('2050' as INT)/1000, 'FM0.000'), '0') FROM DUAL

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 2016-04-20
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多