Для преобразования числа в строку с заданным форматом используют функцию TO_CHAR:
to_char (число, формат)
Например:
SELECT to_char (12345, '99999990.00') AS "99999990.00",
to_char (12345, 'S99999990.00') AS "S99999990.00",
to_char (-12345, 'S99999990.00') AS "S99999990.00",
to_char (12345, 'S99G999G990D00') AS "S99G999G990D00"
| # | 99999990.00 | S99999990.00 | S99999990.00 | S99G999G990D00 |
|---|---|---|---|---|
| 1 | 12345.00 | +12345.00 | -12345.00 | +12,345.00 |
Формат числа задается кодами форматирования
| Код | Описание |
|---|---|
| 9 | позиция цифры (может отсутствовать, если цифра незначащая) |
| 0 | позиция цифры (присутствует всегда, даже если цифра незначащая) |
| . (точка) | десятичная точка |
| , (запятая) | разделитель групп (тысяч) |
| PR | отрицательное значение в угловых скобках |
| S | знак, добавляемый к числу (с учётом локали) |
| L | символ денежной единицы (с учётом локали) |
| D | разделитель целой и дробной части числа (с учётом локали) |
| G | разделитель групп (с учётом локали) |
| MI | знак минус в заданной позиции (если число < 0) |
| PL | знак плюс в заданной позиции (если число > 0) |
| SG | знак плюс или минус в заданной позиции |
| RN | число римскими цифрами (в диапазоне от 1 до 3999) |
| TH или th | окончание порядкового числительного |
| V | сдвиг на заданное количество цифр (см. замечания) |
| EEEE | экспоненциальная запись числа |
Из этого многообразия обычно используют только
| Код | Описание |
|---|---|
| 9 | позиция цифры (может отсутствовать, если цифра незначащая) |
| 0 | позиция цифры (присутствует всегда, даже если цифра незначащая) |
| D | разделитель целой и дробной части числа (с учётом локали) |
| G | разделитель групп (с учётом локали) |
Пройдемся по ним.
9 - позиция цифры. Может отсутствовать, если цифра незначащая.
Если на позиции 9-ки в числе есть значащая цифра, то она отображается, если нет, то не отображается.
На примерах будет понятнее.
SELECT to_char (12, '999')
| # | to_char |
|---|---|
| 1 | 12 |
Если дробную часть не указали в формате, то она не отображается:
SELECT to_char (12.345, '999')
| # | to_char |
|---|---|
| 1 | 12 |
Дробная часть в формате начинается после точки . или символа D:
SELECT to_char (12.345, '999.9')
| # | to_char |
|---|---|
| 1 | 12.3 |
Мы указали одну 9-ку после запятой, поэтому в отформатированном числе видем после запятой только десятки.
SELECT to_char (0.12345, '999.99')
| # | to_char |
|---|---|
| 1 | .12 |
Интересный момент: при форматировании числа цифры, выходящие за формат, не отбрасываются. Число сначала округляется до указанной в формате точности:
SELECT to_char (12.457, '999.99')
| # | to_char |
|---|---|
| 1 | 12.46 |
Можно было ожидать, что в результате получим 12.45. Но так как на позиции тысячных стоит 7, то после округления получаем 12.46
0 - позиция цифры. Отображается всегда.
Если в формате числа встретился 0, то цифра всегда отображается:
SELECT to_char (12, '00') AS "00",
to_char (12, '000000') AS "000000"
| # | 00 | 000000 |
|---|---|---|
| 1 | 12 | 000012 |
SELECT to_char (0.12345, '999.99') as "999.99",
to_char (0.12345, '990.99') as "990.99"
| # | 999.99 | 990.99 |
|---|---|---|
| 1 | .12 | 0.12 |
D - разделитель целой и дробной части
Разделитель целой и дробной части нужен для указания, сколько знаков после запятой нужно отобразить:
SELECT to_char (123.4567, '999D0') AS "999D0",
to_char (123.4567, '999D00') AS "999D00"
| # | 999D0 | 999D00 |
|---|---|---|
| 1 | 123.5 | 123.46 |
G - разделитель групп
На месте G в формате числа вставляется символ разделителя групп. Обычно его используют для отделения тысяч, миллионов, миллиардов...
SELECT to_char (1234567.89, '9G999G999D00')
| # | to_char |
|---|---|
| 1 | 1,234,567.89 |
Но ни что не мешает использовать его в произвольном месте:
SELECT to_char (12345, '999G9G9')
| # | to_char |
|---|---|
| 1 | 123,4,5 |
Если число не входит в формат
Если в формате числа указать мешьше цифр, чем значащих цифр в самом числе, то в результате получим строку из # по формату:
SELECT to_char (123, '9D99'),
to_char (123, '90')
| # | to_char | to_char |
|---|---|---|
| 1 | #.## | ## |