如果我的数据包含一个数字列,其数值包含千分之一(例如63254830038
),并且我想将数字格式化为美元数量(例如$63,254,830,038
),我知道我可以用:
SELECT numeric_column, to_char(numeric_column, '$999G999G999G999') from table
格式化值,但为了可靠地执行此操作,我要么必须包含不必要的长文本字符串(' $ 999G999G999G999'),要么知道可能的最大位数。有没有办法说,广泛地说,"组号用逗号"而不是明确地说"组成数百,组成数千,哦!请分组数百万"?
答案 0 :(得分:1)
您只需要将integer
转换为money
类型。
E.g:
tests=> select cast(63254830038 as money);
或替代语法:
tests=> select 6323254830038::money;
并输出(我来自波兰,所以money
类型采用我的区域设置并设置正确的货币符号):
money
----------------------
63.254.830.038,00 zł
答案 1 :(得分:0)
您可以尝试这样的事情(在sql-server中工作,不确定postgresql)
选择转换(varchar,演员(' 63254830038'作为金钱),1)
答案 2 :(得分:0)
你可以用正则表达式做事:将数字转换为字符串,反转它,使用regexp_replace
在3对数字对之间插入逗号,然后再将其反转:
select '$' || reverse(regexp_replace(
reverse(numeric_column::varchar),
E'(\\d\\d\\d)(?=\\d)', '\1,', 'g'))
regexp_replace
的第一个参数是要匹配的表达式,它包含两部分:
(\\d\\d\\d)
表示已捕获的3位数字(?=\\d)
是单个数字的正前瞻约束,这意味着匹配仅在其后面有数字时才计算。 (也就是说,这个数字被检查存在,但它不算作比赛的一部分。)第二个参数是替换为:3个捕获的数字,加上逗号。
第三个参数'g'
是一个标志,表示它应该尽可能多地匹配和替换。
有关PostgreSQL中正则表达式的更多信息,请参阅the documentation。