Использование to_char для форматирования валюты? - PullRequest
0 голосов
/ 07 ноября 2018

Итак, я хочу, чтобы зарплата, возвращаемая в наборе результатов, была отформатирована для этого типа валюты, но я думаю, что я использую to_char в неправильном месте, но я не уверен, как. Я также не уверен, должен ли я использовать это в обоих случаях Зарплаты также. Любая помощь будет высоко ценится!

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

Я получаю
ORA-00923: FROM keyword not found where expected ошибка от Oracle Apex .

Работает нормально без to_char.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Вы ищете это:

SELECT EMPNO, ENAME, JOB, TO_CHAR(SAL * 52, 'FM999,999') as SALVAL 
FROM EMP
WHERE SAL * 52 >
(SELECT AVG(SAL *52) FROM EMP);
0 голосов
/ 07 ноября 2018

Вам также необходимо передать данные, которые вы хотите отформатировать, в to_char:

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

Так передайте свою сумму * 52 в качестве первого аргумента

Кстати, вы можете захотеть использовать такой формат, как:

TO_CHAR(Sal*52, 'L999G999D99')

Вместо того, чтобы жестко кодировать символы и группировать разделители, использование этих букв возьмет символ и разделитель группировки из настроек региона базы данных. Если ваше приложение будет иметь международную аудиторию, вы должны понимать, что не все используют запятую для группировки тысяч и точку для десятичных чисел. Некоторые люди пишут 123,456,99 за пример «сто двадцать три тысячи четыреста пятьдесят шесть [долларов] 99 [центов]»

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm имеет больше информации на символ

Стоит также упомянуть, если после to_char () ing появляются неожиданные начальные пробелы, запустите маску формата с помощью FM, например

TO_CHAR(123, 'FML999G999D99')

FM - Fill Mode, отключает средство в oracle, которое автоматически дополняет данные пробелами, чтобы они соответствовали ширине маски форматирования. Это удобно для отчетов, если вы выгружаете данные в формате фиксированной ширины, чтобы они дополнялись пробелами, поэтому все ваши значения имеют ширину, например, 9 символов, но это не нужно или нежелательно в других контекстах

0 голосов
/ 07 ноября 2018

вы можете попытаться указать значение в первом параметре, а второй - в вашем формате.

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