Математические функции

TO_CHAR - форматирование числа

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

Если дробную часть не указали в формате, то она не отображается:

SELECT to_char (12.345, '999')
#to_char
112

Дробная часть в формате начинается после точки . или символа D:

SELECT to_char (12.345, '999.9')
#to_char
112.3

Мы указали одну 9-ку после запятой, поэтому в отформатированном числе видем после запятой только десятки.

SELECT to_char (0.12345, '999.99')
#to_char
1.12

Интересный момент: при форматировании числа цифры, выходящие за формат, не отбрасываются. Число сначала округляется до указанной в формате точности:

SELECT to_char (12.457, '999.99')
#to_char
112.46

Можно было ожидать, что в результате получим 12.45. Но так как на позиции тысячных стоит 7, то после округления получаем 12.46

0 - позиция цифры. Отображается всегда.

Если в формате числа встретился 0, то цифра всегда отображается:

SELECT to_char (12, '00') AS "00", 
       to_char (12, '000000') AS "000000"
#00000000
112000012
SELECT to_char (0.12345, '999.99') as "999.99",
       to_char (0.12345, '990.99') as "990.99"
#999.99990.99
1.120.12

D - разделитель целой и дробной части

Разделитель целой и дробной части нужен для указания, сколько знаков после запятой нужно отобразить:

SELECT to_char (123.4567, '999D0') AS "999D0", 
       to_char (123.4567, '999D00') AS "999D00"
#999D0999D00
1123.5123.46

G - разделитель групп

На месте G в формате числа вставляется символ разделителя групп. Обычно его используют для отделения тысяч, миллионов, миллиардов...

SELECT to_char (1234567.89, '9G999G999D00')
#to_char
11,234,567.89

Но ни что не мешает использовать его в произвольном месте:

SELECT to_char (12345, '999G9G9')
#to_char
1123,4,5

Если число не входит в формат

Если в формате числа указать мешьше цифр, чем значащих цифр в самом числе, то в результате получим строку из # по формату:

SELECT to_char (123, '9D99'),
       to_char (123, '90')
#to_charto_char
1#.####
ПредыдущаяСледующая