我需要获取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构造吗?
提前致谢。
答案 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