使用to_char格式化货币?

时间:2018-11-07 03:39:03

标签: sql oracle oracle-apex

所以我想将结果集中返回的薪水格式化为这种货币类型,但是我认为我在错误的位置使用了to_char,但是我不确定如何使用。我也不确定是否在Salary的两个实例中都必须使用它。任何帮助将不胜感激!

SELECT EMPNO, ENAME, JOB, SAL * 52 TO_CHAR('$999,999')
FROM EMP
WHERE SAL * 52 >
(SELECT AVG(SAL *52) FROM EMP);

我收到了
Oracle Apex 中的ORA-00923: FROM keyword not found where expected错误。

在没有to_char的情况下运行良好。

3 个答案:

答案 0 :(得分:2)

您还需要将要格式化的数据也传递给to_char:

SELECT TO_CHAR(123, '$999,999') from dual

因此将您的sal * 52作为第一个参数

顺便说一句,您可能希望使用更像以下格式的文件:

TO_CHAR(Sal*52, 'L999G999D99')

使用这些字母而不是对符号和分组分隔符进行硬编码,将从数据库的区域设置中获取符号和分组分隔符。如果您的应用将吸引国际用户,您应该意识到,并非所有人都使用逗号将千位和小数点分组。有人为“ 123.0465 [$] 99 [cents]”示例写下123.456,99

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm有更多关于char的信息

如果在to_char()处理后出现意外的前导空格,也可能值得一提,请使用FM等格式启动格式掩码。

TO_CHAR(123, 'FML999G999D99')

FM是“填充模式”,它关闭了oracle中的一种功能,该功能会自动用前导空格填充数据,以使其与格式化掩码的宽度匹配。如果您以固定宽度的格式转储数据,并用空格填充,则对于报告很方便,因此您的所有数据量都为9个字符宽,但是在其他情况下则是不必要的或不希望的

答案 1 :(得分:1)

您可以尝试让第一个参数中的值第二个为您的格式。

SELECT EMPNO, ENAME, JOB, to_char(SAL * 52,'$999,999')
FROM EMP
WHERE SAL*52 > (SELECT AVG(SAL * 52) FROM EMP) ;

答案 2 :(得分:1)

您在寻找这个吗?

SELECT EMPNO, ENAME, JOB, TO_CHAR(SAL * 52, 'FM999,999') as SALVAL 
FROM EMP
WHERE SAL * 52 >
(SELECT AVG(SAL *52) FROM EMP);