【发布时间】:2011-05-27 21:16:29
【问题描述】:
我需要获取 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 构造吗?
提前致谢。
【问题讨论】:
-
这里的第一个问题,不知道所有的代码格式都去哪里了,在预览中看起来很好
-
我已发布建议的编辑格式化您的代码。获取格式的最快方法是选择代码,然后按问题框顶部的 {} 按钮。
-
您的应用程序编程语言是什么?德尔福、C++、Perl?该语言可能有一个库可以满足您的需求,例如 Perl 中的 DateTime::Locale。
-
当然有,但我想直接从查询中获取这些名称。