如何在不运行的情况下将数据库设置为将“日期”显示为“ MDY”:

SET datestyle = "ISO, MDY";


每次尝试访问它时,都将其保留?
我使用的是Postgresql版本9.1,Ubuntu 12.04。
我的系统语言环境在数据库安装时设置为en_CA.utf8,而我最近将其更改为en_US.utf8。 />
返回:-> "en_CA.UTF-8"

但是

show lc_CTYPE


返回:-> "en_CA.UTF-8"

#1 楼

几年前,我曾经遇到过一个非常类似的问题,然后发现我可以做到

ALTER DATABASE database_name SET datestyle TO "ISO, MDY";


尝试一下。 (这适用于每个数据库,对于所有数据库的解决方案,请在您的postgresql.conf中设置此参数-感谢@a_horse_with_no_name。)

请注意,默认设置与语言环境无关。但是,在将initdb设置为所需的值后,您可以在postgresql.conf中进行更改。 />
设置datestyle会产生以下效果:

test=# SHOW lc_ctype;
      lc_ctype
--------------------
 Hungarian, Hungary
(1 row)


test=# SHOW lc_time;
      lc_time
--------------------
 Hungarian, Hungary
(1 row)


现在这并不是真正希望的-在具有en_US.UTF8的其他服务器上也是如此。尝试"ISO, DMY",也暗示我在产生输出时"ISO"部分或多或少会覆盖其他部分。对于输入值,它具有预期的效果,如下表所示:

SET datestyle TO "ISO, MDY";

SELECT current_date;
    date
------------
 2012-06-21
(1 row)

datestyle设置。

仔细阅读文档后,可以看到datestyle是一对部分冲突的设置:


由于历史原因,此变量包含两个独立的组件:输出格式规范(ISO,Postgres,SQL或德语)和用于年/月/日订购的输入/输出规范(DMY,MDY或YMD)。


对我来说,这意味着必须通过一些实验来找到适合自己需求的方法-但最好的方法是将其保留为默认值,并始终使用明确的输入格式。其中两个是'YYYY-MM-DD''YYYYMMDD'。我更喜欢前者-甚至使用此IRL;)

注意:datestylepostgresql.conf设置(和其他运行时设置)可以被ALTER DATABASE bla SET datestyle ...覆盖,为单个数据库永久设置,或由SET datestyle TO ...为当前会话设置。当导入具有不同日期格式的某些第三方数据时,后者可能很有用。

#2 楼

谢谢@a_horse_with_no_name | @dezso | @ypercubeᵀᴹ

我想写一个易于实现的答案:步骤



方法1:仅针对每个数据库设置datestyle



show datestyle;向您显示当前日期样式“ ISO,DMY”或“ ISO,MDY”查询

ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";



ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";


最重要的步骤:始终在设置日期样式后重新启动postgres

sudo service postgresql restart



sudo /etc/init.d/postgresql restart


让测试配置

如果您已在下面的查询中设置了DMY,则应该对您有用。

查询:select '20/12/2016'::date输出:"2016-12-20"
为您工作

查询:select '12/19/2016'::date输出:"2016-12-19"



方法2:永久:在配置文件中设置的内容将在所有数据库中设置您将在将来创建





在/etc/postgresql/9.3中/main/postgresql.conf设置

datestyle = 'iso, dmy'datestyle = 'iso, mdy'


最重要的步骤:始终在设置日期样式后重新启动postgres
br />


sudo service postgresql restart


让测试配置

如果您在下面设置了DMY,则查询应适用您

查询:sudo /etc/init.d/postgresql restart输出:select '20/12/2016'::date



如果您在以下查询中设置了MDY,那么它应该对您有用

查询:"2016-12-20"输出:select '12/19/2016'::date