从请求中更改 PostgreSQL 日期语言
Posted
技术标签:
【中文标题】从请求中更改 PostgreSQL 日期语言【英文标题】:Change PostgreSQL date language from request 【发布时间】:2015-10-08 07:16:34 【问题描述】:我是 PostgreSQL 的新手,我正在尝试更改日期函数结果的语言环境,以获取另一种语言的 to_char(my_date, 'Month')
的结果。
这是我的一些设置:
$> show lc_time;
en_US.UTF-8
我在文档中发现可以在数据库初始化时更改语言环境:
initdb --locale=fr_FR
但这并不是我想要的。
在 mysql 中,我曾经这样做过:
SET lc_time_names = 'fr_FR';
但不幸的是,我找不到使用 PostgreSQL 的方法。有吗?
【问题讨论】:
试试这个:select set_config('lc_time', 'fr_FR', true);
【参考方案1】:
您可以获得具有特殊TM
格式的月份名称的本地化版本(翻译模式):
to_char(my_date, 'TMMonth')
您也可以使用TMD
将其应用于工作日名称。两个版本都将使用服务器的语言环境显示名称,除非 lc_time
运行时参数具有特定设置。也可以为当前会话更改该设置:
SET lc_time = 'fr_FR';
如果您想在同一会话中恢复为默认设置,请使用:
SET lc_time TO DEFAULT;
【讨论】:
是的,但是我的数据库是用英文初始化的,我的目的是获取另一种语言的月份名称。 谢谢,最后的编辑似乎是我要找的【参考方案2】:您可以使用set_config(setting_name, new_value, is_local)
设置函数范围的配置参数(包括在IMMUTABLE
or STABLE
functions 中)。
所以,如果你想用fr_FR
格式化你的日期,你可以这样做:
CREATE OR REPLACE FUNCTION format_month() RETURNS TEXT AS $$
SELECT set_config('lc_time', 'fr_FR.utf8', true);
SELECT to_char(now(), 'TMMonth');
$$ LANGUAGE sql STABLE;
(注意TM-
prefix 启用翻译模式,它根据lc_time
打印本地化的日期和月份名称。)
在我的计算机上,在我安装 fr_FR
语言环境并重新启动 postgres 之前,上述函数会产生错误。你如何做到这一点取决于你的操作系统,但在 Ubuntu 上我使用了dpkg-reconfigure locales
。
【讨论】:
以上是关于从请求中更改 PostgreSQL 日期语言的主要内容,如果未能解决你的问题,请参考以下文章