将 varchar 字符串转换为 db2 中的货币格式 SQL

Convert varchar string to Currency format in db2 SQL

我有一列,我必须从中提取字符串,然后将其格式化回美国货币格式,小数点后两位。

例如: 列值:{tag}0000020000890|

由此,我必须匹配标签并提取20000890,并将其格式化为200,008.90

我已经用下面的代码提取了部分:

LTRIM(REGEXP_SUBSTR('match pattern', 1,1,'i',,1), '0')

匹配模式为 '\{tag\}(.*?)\|'

有了这个,我可以提取 20000890

然后我在其上尝试了下面的 to_char 和 to_number 函数,将其格式化为逗号分隔的货币,小数点后两位。

to_char(ltrim(Regexp_substr('match pattern',1,1,'i',1),'0'), '99G999G999D99')

但这会引发以下错误:

Sql error -20447, sqlstate 22007 sqlerrmc 99G999G999D99 Sysibm.Varchar-format

然后我试了,

to_char(to_number(ltrim(Regexp_substr('match pattern',1,1,'i',1),'0')), '99G999G999D99')

但这也会引发错误:

Sql error -20476, sqlstate 22018 sqlermc DECFLOAT_FORMAT; 99G999G999D99

我不确定是什么导致了这个错误。

看看VARCHAR_FORMAT。它是 TO_CHAR 映射到的函数。组分隔符不是 G,而是“,”或“.”。基本上,您必须将格式字符串 99G999G999D99 替换为 99,999,999.99.

Db2 文档中有更多相关示例。

仅从 V11.5 开始支持您尝试使用的格式。
TO_CHAR V11.5
TO_CHAR V11.1
比较两个链接中的 Table 2. Format elements for decimal floating-point to varchar table。

此外,您必须在 TO_CHAR 的第一个参数中将字符串转换为数值:

SELECT TO_CHAR(DECFLOAT(REGEXP_SUBSTR(V, '\{tag\}(.*?)\|', 1, 1, 'i', 1)), '99,999,999.99') 
FROM (VALUES '{tag}0000020000890|') T(V);