【问题标题】:Format mask with leading zero for NUMBERNUMBER 前导零的格式掩码
【发布时间】:2021-05-26 12:46:23
【问题描述】:

如果我想保留一个前导零并且不知道数据“大小”,我应该使用哪种格式掩码将表格列 NUMBER 中的数字数据转换为 char?值可以有整数和/或小数部分。我所知道的 - 这是NUMBER。

源数据(数字)

.12345678901234567890
100
100.500
12345678901234567890.1234567890

想要的结果(文本)

0.1234567890123456789
100
100.5
12345678901234567890.123456789

以此类推,即数字可能在整个部分具有不可预测的位数,在小数部分具有不可预测的位数。

【问题讨论】:

  • 好的,所以不是真正的前导零,而是为 does this help?
  • @AlexPoole 是的,抱歉,打错了,只是 NUMBER
  • @AlexPoole 谢谢,定制格式掩码似乎很有用,我的同事还提供 SELECT CASE WHEN regexp_like (column1, '^\.\d+$') THEN '0' || column1 ELSE column1 END
  • 是的,但至少最后一个元素需要是 to_char(column1) 以避免数据类型不匹配错误。

标签: oracle oracle19c


【解决方案1】:

NUMBER 数据类型是没有格式的二进制值;如果要格式化数字,则需要将其转换为另一种可以用某种格式表示数值的数据类型,例如使用TO_CHAR 函数的VARCHAR2 数据类型:

SELECT value,
       RTRIM(
         TO_CHAR( value, 'FM999999999999999999999990D99999999999999999999' ),
         '.'
       ) AS formatted_number
FROM   table_name

其中,对于样本数据:

CREATE TABLE table_name ( value ) AS
SELECT .12345678901234567890 FROM DUAL UNION ALL
SELECT 100 FROM DUAL UNION ALL
SELECT 100.500 FROM DUAL UNION ALL
SELECT 12345678901234567890.1234567890 FROM DUAL

输出:

VALUE FORMATTED_NUMBER
.1234567890123456789 0.1234567890123456789
100 100
100.5 100.5
12345678901234567890.123456789 12345678901234567890.123456789

数字可能在整个部分有不可预测的位数,在小数部分有不可预测的位数。

只需在D 小数分隔符前后增加9s 的数量,直到整数/小数位数达到您的最大精度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多