【问题标题】:AS400 thousand delimiter on numeric field数字字段上的 AS400 千分隔符
【发布时间】:2016-05-13 23:57:32
【问题描述】:

有没有办法用逗号格式化千位数字?

根据 IBM 文档,语法如下:

DECIMAL(:newsalary, 9, 2, ',')

newsalary 是字符串(字段) 9是精度 2是规模 , 是分隔符。

我试过了:

SELECT DECIMAL ( T1.FIELD1 , 15 , 2 , "," ) AS TOTAL FROM TABLE T1

在尝试时,我收到以下错误:

消息:[SQL0171] 函数 DECIMAL 的参数 4 无效。

【问题讨论】:

  • t1.field1 是十进制还是字符串?
  • 我找到了您所依赖的示例,但它不适用于您的情况。它用于将 ',' 替换为 '.'例如。 1020,50 到 1020.50 ,我建议您将前 3 个字母子串化,然后用逗号连接,然后将 4-6 子串和逗号连接,依此类推。
  • 如果 t1.field1 是一个字符串,那么它已经有一个逗号,这取决于您尝试使用 DECIMAL() 的方式。该函数希望删除逗号,以便它可以创建一个有效的数值(不能嵌入逗号)。您到底打算如何处理结果值(一旦它是数字)?

标签: sql ibm-midrange number-formatting decimalformat


【解决方案1】:

DECIMAL 从字符串类型转换为数值类型。

数值类型没有分隔符;只有数字的字符表示有分隔符。

您使用的是什么工具 STRSQL、运行 SQL 脚本或其他工具?将字符串转换为数字后,该工具应在显示数字数据时添加适当的语言分隔符。例如,在 STRSQL 中:

select decimal('12345.67', 12,2) as mynum
from sysibm.sysdummy1                    

返回:

       MYNUM
   12,345.67

使用 SQL 格式化字符串通常是个坏主意。这应该留给任何消耗数据的人。

但如果你真的、真的、真的想这么做。您应该创建一个用户定义的函数 (UDF) 来为您完成它。这是一篇文章,Make SQL Edit the Way You Want It To,其中包括用 ILE RPG 编写的 EDITDEC 函数的源代码以及您需要在 SQL 语句中使用它的 SQL 函数定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2018-06-22
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多