在Oracle案例陈述中将格式编号作为货币

时间:2017-06-15 15:13:56

标签: sql oracle

如果这是一个愚蠢的问题我很抱歉,但我刚开始使用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

我非常确定我需要在某个地方添加TO_CHAR(noteopenam,' $ 9,999.99')但是我是在SUM之后添加它还是在&#34之后在noteopenamt之前添加它;那么" THEN& #34 ;?

1 个答案:

答案 0 :(得分:1)

我尝试了你正在考虑的两件事中的任何一件,代码就像这样'总和'之后:

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错误,因为$符号不会被识别为数字格式的一部分。

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

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