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

标签 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 是我的数据库

最佳答案

你认为为什么你甚至有逗号?
documentation 没有提及格式化值。

MONEY and SMALLMONEY are currency numeric data types. The scale for currency data types is always 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

关于sql - 将金钱转换为文本并保持格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40892216/

相关文章:

sql - COUNT 查询的意外结果

浏览器中 InterSystems Cache 的终端仿真

sql - 如何从两个表中查找重复项并在其本身中查找重复项?

sql - Oracle:在包含分区 LOB 列的表上创建索引

sql - SQL插入键-键-值数据

将数据从 SQL Server 数据库移动到 Oracle 数据库的 Python 脚本不断给出 'ORA-01036: illegal variable name/number'

sql - SUM(Column_Value) 给出的值与计算器不同

intersystems-cache - 系统间缓存 : Embed SQL always returns only first row

java - 通过 Gateway Java 在缓存中设置代理 Java 对象的数据类型 java.util.Date 属性

java - Intersystems Caché 与 Java Gateway - 将参数作为 java.io.FileInputStream 传递