Для преобразования числа в строку с заданным форматом используют функцию 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 | #.## | ## |