Firebird中的本地化月份名称

时间:2011-05-27 21:16:29

标签: sql timestamp firebird

我需要获取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 :(得分:0)

带有本地化字符串的参考表怎么样,其中包含月份编号的键。我认为这是在Firebird系统表中完成的,但是如果确实存在,则无法在系统表中找到文档或位置。

编辑: 我检查了系统表,文档和文字在Firebird本身不可用。对不起: - )

答案 1 :(得分:0)

我认为没有内置功能。您应该考虑为此编写自己的UDF。完成后,使用起来非常简单。以下资源应指向正确的方向:

我确信希望下一个主要版本(3.0)支持编写内部函数。

<强>更新

Firebird 3.0 支持内部SQL函数:http://tracker.firebirdsql.org/browse/CORE-2047

答案 2 :(得分:0)

您可以使用DECODE内置函数代替CASE:http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-decode.html