Sql 在Oracle案例语句中将数字格式化为货币

Sql 在Oracle案例语句中将数字格式化为货币,sql,oracle,Sql,Oracle,如果这是一个愚蠢的问题,我很抱歉,但我刚刚开始使用Oracle,我需要一些帮助。我正在使用case语句构建一个查询,以透视一列并在此基础上求和,但我不知道如何或在何处在语法中添加格式。我的问题是: select CONTRACTDATE, sum (case when currmiaccttypcd='NAID' then noteopenamt end) as NAID, sum (case when currmiaccttypcd='UAID' then noteopenamt end)

如果这是一个愚蠢的问题,我很抱歉,但我刚刚开始使用Oracle,我需要一些帮助。我正在使用case语句构建一个查询,以透视一列并在此基础上求和,但我不知道如何或在何处在语法中添加格式。我的问题是:

select CONTRACTDATE,

sum (case when currmiaccttypcd='NAID' then noteopenamt end) as NAID,
sum (case when currmiaccttypcd='UAID' then noteopenamt end) as UAID,
sum (case when currmiaccttypcd='RVID' then noteopenamt end) as RVID,
sum (case when currmiaccttypcd='MAID' then noteopenamt end) as MAID,
sum (case when currmiaccttypcd='MCID' then noteopenamt end) as MCID

我很确定我需要在某个地方加上“$9999.99”,但我是在求和之后加上它,还是在noteopenamt之后加上它

我建议您尝试您正在考虑的两件事中的任何一件,代码如下“求和后”:

sum (to_char (case when currmiaccttypcd='NAID' then noteopenamt end, '$9,999.99')) as NAID,
或者像这样“在那之后”

sum (case when currmiaccttypcd='NAID' then to_char (noteopenamt, '$9,999.99') end) as NAID,
然后您将得到一个ORA-01722:无效号码异常。无论哪种方式,您都要将数字转换为字符串,然后尝试对这些字符串求和。由于sum需要一个数值参数,它试图隐式地将字符串转换回数字;形式为to_number“$42.00”的某些内容将得到ORA-01722错误,因为$sign未被识别为数字格式的一部分

相反,您需要对数字求和,然后将结果转换为字符串:

to_char (sum (case when currmiaccttypcd='NAID' then noteopenamt end), '$9,999.99') as NAID,

若要_charsumcase…,$9999.99,您希望在求和时将值保留为一个数字,然后在求和完成时将其转换为所需格式。注意,这将只返回最大9999.99值!或者保留一个数字,并在表示层中处理格式。尝试两种方法都很简单,不是吗?然后看看做任何一个都会导致ORA-01722的总和出错。。。您需要格式化总和的结果,正如xQbert所示。感谢您的解释,这非常有效。最后,我将接受@xQbert的建议,在表示层中进行最终格式化。尽管如此,我将来肯定需要使用它。@RonL-您可能刚开始使用Oracle,但您已经理解了一个对许多长期开发人员来说似乎陌生的基本概念:格式化最好在表示层完成!虽然知道如何在SQL中操作确实有帮助,但对于某些作业(包括最终结果的格式化),SQL技巧应该是最后一件事,而不是第一件事。