将 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);
我有一列,我必须从中提取字符串,然后将其格式化回美国货币格式,小数点后两位。
例如:
列值:{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);