Answers:
几年前我曾经遇到过非常类似的问题,然后发现我可以
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
试试看 (这对于每个数据库都有效,对于所有数据库的解决方案,都可以在其中设置此参数postgresql.conf
-感谢@a_horse_with_no_name。)
请注意,默认设置不是独立于语言环境的。但是,initdb
将其设置为所需的值后,您可以在中自行进行更改postgresql.conf
。
@swasheck的评论让我注意到我的设置:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
设置datestyle
具有以下效果:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
现在这并不是真正的预期-并且在具有的其他服务器上en_US.UTF8
也是如此。尝试"ISO, DMY"
也表明我"ISO"
在产生输出时该部分或多或少地覆盖了另一部分。对于输入值,它具有预期的效果,如下表所示:
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
-意思是,给定的输入样式会导致给定datestyle
设置错误。
仔细阅读文档后,可以看到这datestyle
是一对部分冲突的设置:
出于历史原因,此变量包含两个独立的组件:输出格式规范(ISO,Postgres,SQL或德语)和用于年/月/日排序的输入/输出规范(DMY,MDY或YMD)。
对我来说,这意味着必须通过一些试验来找到适合其需求的方法-但最好的方法是将其保留为默认值,并始终使用明确的输入格式。其中两个是'YYYY-MM-DD'
和'YYYYMMDD'
。我更喜欢前者-甚至使用此IRL;)
注意:的datestyle
设置(和其他运行时设置)postgresql.conf
可以被覆盖ALTER DATABASE bla SET datestyle ...
,可以为单个数据库永久SET datestyle TO ...
设置,也可以为当前会话设置。当导入具有不同日期格式的某些第三方数据时,后者可能很有用。
谢谢@a_horse_with_no_name | @dezso | @ypercubeᵀᴹ
方法1:仅按数据库设置datestyle
show datestyle;
向您显示当前日期样式“ ISO,DMY ”或“ ISO,MDY”
现在取决于您在以下查询中设置的postgres DMY或MDY中的要求
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";
要么
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";
最重要的步骤:总是在设置datestyle后重启postgres
sudo service postgresql restart
要么
sudo /etc/init.d/postgresql restart
让测试配置
如果您已将DMY设置为以下查询,则该查询将为您工作
查询:select '20/12/2016'::date
输出: "2016-12-20"
要么
如果您在下面的查询中设置了MDY,那么它应该对您有用
查询:select '12/19/2016'::date
输出: "2016-12-19"
方式2:永久:在配置文件中设置的任何内容都将在以后创建的所有数据库中设置
在/etc/postgresql/9.3/main/postgresql.conf中设置
datestyle = 'iso, dmy'
要么 datestyle = 'iso, mdy'
最重要的步骤:总是在设置datestyle后重启postgres
sudo service postgresql restart
要么
sudo /etc/init.d/postgresql restart
让测试配置
如果您已将DMY设置为以下查询,则该查询将为您工作
查询:select '20/12/2016'::date
输出: "2016-12-20"
要么
如果您在下面的查询中设置了MDY,那么它应该对您有用
查询:select '12/19/2016'::date
输出: "2016-12-19"