Postgresql

帶有周數和工作日的 to_date() 的意外行為

  • October 3, 2019

我嘗試使用該函式將日期字元串(年、週、星期幾 = 'YYYY-WW-D')轉換為日期to_date()

我得到了這些結果(demo:db<>fiddle):

date string |  to_date()
-------------------------
'2019-1-1'  |  2019-01-01
'2019-1-2'  |  2019-01-01
'2019-1-3'  |  2019-01-01
'2019-1-4'  |  2019-01-01
'2019-1-5'  |  2019-01-01
'2019-1-6'  |  2019-01-01
'2019-1-7'  |  2019-01-01

'2019-2-1'  |  2019-01-08
'2019-2-2'  |  2019-01-08

我不清楚,為什麼這會導致一周中的每一天都在同一日期。

如果我採用 ISO 格式 ( 'IYYY-IW-ID') 這將按預期工作 ( demo:db<>fiddle ):

date string |  to_date()
-------------------------
'2019-1-1'  |  2018-12-31
'2019-1-2'  |  2019-01-01
'2019-1-3'  |  2019-01-02
'2019-1-4'  |  2019-01-03
'2019-1-5'  |  2019-01-04
'2019-1-6'  |  2019-01-05
'2019-1-7'  |  2019-01-06

'2019-2-1'  |  2019-01-07
'2019-2-2'  |  2019-01-08

為什麼它適用於 ISO 模式,而不適用於標準模式?我在這裡想念什麼?

這種行為記錄在案

to_timestampto_date中,工作日名稱或數字(DAYD和相關欄位類型)被接受,但在計算結果時會被忽略。Q四分之一 ( ) 欄位也是如此。

引用自:https://dba.stackexchange.com/questions/250111