Функция to_char как правильно

Есть такой кусочек кода SELECT to_char(1,'09'), который судя по описанию к функции должен вернуть "01" а возвращает " 01" (с опережающим знаком пробел). Используется PGAdmin 1.8.4 и PostgreSQL 8.3. В чем прикол или где искать ошибку?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

На странице

На странице документации
http://postgresql.ru.net/manual/functions-formatting.html
есть куча примеров на эту тему.
Насколько я понял, пробел остаётся на месте знакового разряда. Т.е. если вы укажете не "1" , а "-1" то никаких пробелов у вас не будет. Функция используется для преобразования значений ДАТЫ И ВРЕМЕНИ, а не как просто строковая функция. Соответственно и преобразование осуществляется так, чтобы затем данные значения можно было засасывать как значения даты и времени обратно (я так понимаю).
Для преобразования числовых значений в строку вам нужны функции для работы со строками из другого раздела

как же тогда быть, нужна

как же тогда быть,
нужна строка где будет к, примеру ####YYYY##
где #- числа 1 до 9, а
YYYY - это результат to_char('0009', х), где х - это число от 0 до 9999.
сейчас выкручиваюсь так '####'||trim ( to_char('0009', х) )||'##', - но как то не очень красиво.

В показанном вами примере вы

В показанном вами примере вы (по моему скромному мнению) пытаетесь переложить на СУБД несвойственную ей работу - составление и комбинирование строк с форматированием. СУБД же предназначена для ВЫБОРКИ нужной информации из хранящейся в БД по определённым критериям. А всякие хитрые составления результатов, не имеющих прямое отношение к выборке (опять же по моему скромному мнению должны выполняться на клиенте).
Да СУБД предоставляет вам некий набор функций, но тем не менее, не стоит ожидать, что в этот набор войдёт всё то, что бы вам хотелось.

Это была лирика, уж простите мой брюзжание.
А в качестве решения попробуйте:

SELECT to_char(x, 'FM0009');

где x то самое число от 0 до 9999

Гораздо приятнее получать

Гораздо приятнее получать готовый результат после выполения функции (запроса к базе), нежели после выполнения запроса еще составлять хитрые результаты. Извечные человеческие слабости.
Кроме того аналогичная по названию функция другой СУБД с похожим синтаксисом to_char(x, '009') возвращает немного другой результат.


Я могу прожить жизнь без необходимого, но без лишнего немогу. (с) Михаил Светлов

Приятней, не спорю. Но если

Приятней, не спорю. Но если речь идёт о производительности то лучше всё-таки собирать результаты на клиенте в ущерб приятности, но зато в пику производительности. Впрочем, я ответил на ваш исходный вопрос? :)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023