如何解决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),0) as char(2))
|| \' - \'
|| cast (lpad (extract (hour from prt.dtbegin) + 1,0) as char(2))
) as f_hour
from prt
它工作正常(目前间隔为'23-24 \'是可以的),但我不喜欢它,尤其是每个月都有CASE语句。
因此,我想知道,在Firebird中是否有任何通用的获取本地化月份名称的方法?另外,我可以格式化时间戳的提取部分,而不是当前的cast-lpad-extract构造吗?
提前致谢。
解决方法
引用表中包含本地化字符串并带有月份号的键呢?我以为这是在Firebird系统表中完成的,但是无法找到文档或系统表中的位置(如果确实存在)。
编辑:
我已经检查了系统表和文档,并且文字在Firebird本身中不可用。对不起:-)
, 可以使用DECODE内置函数代替CASE:http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-decode.html
, 我认为没有内置功能。您应该考虑为此编写自己的UDF。完成后,使用非常简单。以下资源应为您指明正确的方向:
http://www.firebirdsql.org/index.php?op=useful&id=deatz_udf
http://www.firebirdfaq.org/faq83/
http://www.ibphoenix.com/downloads/writing_internal_udfs.pdf
我肯定希望下一个主要版本(3.0)将支持编写内部函数。
更新资料
Firebird 3.0将支持内部SQL功能:http://tracker.firebirdsql.org/browse/CORE-2047
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。