将钱转换为文本并保持格式

时间:2016-11-30 15:31:56

标签: sql intersystems

我需要在查询中显示一个美元范围,但是当我连接这些值时,我会在输出中丢失逗号。

select
'$'||CAST(ROUND(MIN(db.INITIAL_BALANCE),-1) AS money)
||' to '||
'$'||CAST(ROUND(MAX(db.INITIAL_BALANCE),-1) AS money) AS Balance_Range

输出是 $ 2060至$ 73690

期望的输出 $ 2,060至$ 73,690

对此有何建议?

Intersystems Cache是​​我的数据库

2 个答案:

答案 0 :(得分:1)

为什么你认为你甚至有逗号? documentation对格式化值没有任何说明。

  

MONEY和SMALLMONEY是货币数字数据类型。货币数据类型的比例始终为4.

SELECT CAST('123123' AS money)

此查询将按预期返回123123.0000

正如我所见,至少有两种方法可以做到这一点。

  • 定义您自己的数据类型,与%Currency相同,您可以在其中更改比例数和格式。但是你应该在你需要的所有类中将所有属性更改为此类型。
  • 或者您可以定义新的SQL函数,它将根据需要格式化所有数字。

如下所示:

Class Sample.Utils Extends %RegisteredObject
{

ClassMethod ToMoney(pValue As %Integer = 0) As %String [ SqlProc, SqlName= "TO_MONEY"]
{
    quit "$ " _ $fnumber(pValue, ",", 2)
} 

}

查询SELECT Sample.TO_MONEY(1234567)将返回$ 1,234,567.00

答案 1 :(得分:1)

'$'||TRIM(tochar(MIN(db.Account_Balance),'9,999,999'))|| ' to ' ||'$'||TRIM(tochar(max(db.Account_Balance),'9,999,999'))

给了我所需要的东西..谢谢!