从请求中更改 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 日期语言的主要内容,如果未能解决你的问题,请参考以下文章

java 字符串转换成日期

PostgreSQL:通过随机天数更改日期

POS EMV 卡密码更改

(译)使用Go语言从零编写PoS区块链

昨天 - 在 Redshift 和 PostgreSQL 中 - 日期添加兼容性

PostgreSQL:将字符串转换为没有时区的时间戳以更改时间日期时,我得到了意想不到的结果