Иллюстрированный самоучитель по PostgreSQL

Функции преобразования типа

Если количество цифровых позиций, обозначенных метасимволом 9 в форматной строке, превышает количество цифр в числе n, лишние позиции заполняются пробелами. Если лишние цифровые позиции обозначены метасимволом 0, лишние позиции заполняются нулями.

Если количество заданных цифровых позиций меньше необходимого для представления целой части числа, преобразование становится неоднозначным из-за потери значащих цифр. Поскольку функция to_char() не знает, какие именно цифры следует удалить, во всех заданных позициях выводится символ #. Следовательно, в форматную строку необходимо включить максимальное количество цифр, которые могут быть получены в результате форматирования. Для удаления лишних пробелов также можно воспользоваться функцией translate() или функциями усечения (Hrim() и т. д.).

Чтобы метасимвол интерпретировался в форматной строке буквально (то есть как литерал), заключите его в кавычки. Чтобы включить в форматную строку литеральный символ кавычки, его необходимо экранировать двумя обратными косыми чертами.

Примечание
В форматной строке можно свободно использовать любые символы, не являющиеся метасимволами (например, символ $ и др.) В отформатированной строке они выводятся без изменений
.

Примеры:

booktown=# SELECT to_char(123456789. '999G999G999D99') AS formatted,
booktown-# to_char(123456789. '999999999') AS justjrigits,
booktown-f to_char(123456789, '00999999999') AS with_zeroes;
formatted | justjrigits | with_zeroes
123.456.789.00 | 123456789 | 00123456789
(1 row)

booktown=# SELECT cost * 100 AS cost_to_order.
booktown-# to_char(cost * 100, '$99.999.99') AS monetary,
booktown-# translate(to_char(cost * 100. '$9.999.99'),' ',").
booktown-# AS translated
booktown-# FROM stock
booktown-* LIMIT 3;
cost_to_order monetary translated
2900.00 | $ 2.900.00 $2.900.00
3000.00 $ 3.000.00 $3.000.00
1600.00 $ 1.600.00 i $1.600.00
(3 rows)

booktown=# SELECT tojrhard.O. '9th "Place"') AS first.
booktown-# to_char(2.2, '9th "Place"') AS second,
booktown-# to_char(pi( ), '9th "Place"') AS third,
booktown-# to_char(10, '99V99th "\\"Place\\…..) AS SHIFTed jjp;
first | second | third | SHIFTed_up
1st Place | 2nd Place | 3rd Place | 1000th "Place"
(1 row)

Примечание
В PostgreSQL версии 7.1.x ошибка в реализации метасимволов RN (римская запись) приводит к тому, что функция to_char() возвращает неправильный результат, если в форматной строке отсутствует последовательность FM. Ошибка должна быть исправлена в версии 7.2, а в качестве временной меры можно использовать полную последовательность FMRN
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.