所以我想将结果集中返回的薪水格式化为这种货币类型,但是我认为我在错误的位置使用了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
的情况下运行良好。
答案 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);