Локализованные названия месяцев в Firebird - PullRequest
1 голос
/ 28 мая 2011

Мне нужно получить различные части поля TIMESTAMP - в частности год , локализованное название месяца (на русском языке), день месяца и часовой интервал (например, «11 - 12»).

В настоящее время я придумал следующее:

select
extract (year from prt.dtbegin) as f_year,
(
  case extract (month from prt.dtbegin)
    when 1 then 'Январь'
    when 2 then 'Февраль'
    /* ... */
    when 12 then 'Декабрь'
  end
) as f_month,
cast (lpad (extract (day from prt.dtbegin), 2, 0) as char(2)) as f_day,
(
  cast (lpad (extract (hour from prt.dtbegin), 2, 0) as char(2)) 
  || ' - '
  || cast (lpad (extract (hour from prt.dtbegin) + 1, 2, 0) as char(2)) 
) as f_hour
from prt

Работает нормально (в данный момент интервал '23 - 24 'в порядке), но мне это не нравится, особенно предложение CASEс каждым месяцем.

Итак, я хотел бы знать, есть ли какой-нибудь распространенный способ получения локализованных названий месяцев в Firebird?Кроме того, могу ли я отформатировать извлеченные части временной метки вместо текущей конструкции cast-lpad-extract?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Не думаю, что для этого есть встроенная функция.Вы должны написать свой UDF для этого.После этого его очень просто использовать.Следующие ресурсы должны указывать вам в правильном направлении:

Я уверен, что следующий основной выпуск (3.0) будет поддерживать написание внутренних функций.

Обновление

Firebird 3.0 будет поддерживать внутренние функции SQL: http://tracker.firebirdsql.org/browse/CORE-2047

0 голосов
/ 03 июня 2011

Вместо CASE вы можете использовать встроенную функцию DECODE: http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-decode.html

0 голосов
/ 28 мая 2011

Как насчет справочной таблицы с локализованными строками в них с ключом номера месяца. Я думал, что это было сделано в системных таблицах Firebird, но не смог найти документацию или расположение в системных таблицах, если это действительно так.

EDIT: Я проверил системные таблицы, документацию и литералы не доступны в самом Firebird. Извините: -)

...