日期转换不支持postgresql 15中的荣誉区域设置

jhiyze9q  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(116)

我试图理解postgresql 15和本地设置的所有细节。我试图设置所有控制区域设置的各种设置,但我仍然得到一些意想不到的结果。

  1. postgres=# CREATE DATABASE lctest TEMPLATE='template0' LC_COLLATE='nb_NO.UTF-8' LOCALE='nb_NO.UTF-8';
  2. CREATE DATABASE
  3. postgres=# \c lctest
  4. You are now connected to database "lctest" as user "postgres".
  5. lctest=# show LC_TIME;
  6. lc_time
  7. -------------
  8. nb_NO.UTF-8
  9. (1 row)
  10. lctest=# select DATE('07/08/2009');
  11. date
  12. ------------
  13. 2009-07-08
  14. (1 row)
  15. lctest=# select to_char(DATE('07/08/2009'), 'DD/TMMonth/YYYY');
  16. to_char
  17. --------------
  18. 08/Juli/2009
  19. (1 row)

这就是我认为结果出乎意料的地方。我从一个字符串中转换一个日期,postgres将日期解释为MM/DD/YYYY。这不符合我的语言环境设置的预期结果。我还将所有其他可用的LC_*值设置为nb_NO.UTF-8,正如预期的那样,我得到了相同的结果,因为我认为其他值不会影响这一点。
是否有更多的设置会影响postgres 15中日期字符串的解析方式?
当然,我可以将日期格式指定为DD/MM/YYYY,但这破坏了区域设置的灵活性。如果我必须指定所有格式细节,那么locale有什么意义呢?

5gfr0r5j

5gfr0r5j1#

lc_time不会影响字符串如何被解释为日期。它在to_char()(将时间戳格式化为字符串)中使用,具有特殊的格式指令,如TMMonth
要影响字符串如何被解释为日期,您必须配置datestyle。举例来说:

  1. SET datestyle = 'GERMAN, DMY';
  2. select DATE('07/08/2009');
  3. date
  4. ════════════
  5. 07.08.2009
  6. (1 row)

相关问题