我一直在按照ISO周分组的Postgres(v10.6)数据库中对数据进行一些统计分析,并且偶然发现周数的返回方式明显不一致,例如:
SELECT TO_CHAR(DATE_TRUNC('week',TIMESTAMP '2019-02-14'),'WW');
返回06
然而:
SELECT EXTRACT(WEEK FROM TIMESTAMP '2019-02-14');
返回7
为什么存在差异/其中一个是正确的?我怀疑后者,因为PHP中的等效操作也返回07:
$dte = new DateTime('2019-02-14');
echo $dte->format('W');
我最担心的是,这种差异有一些很好的理由我错过了......
As documented in the manual 'WW'
回归
周数(1-53)(第一周从一年的第一天开始)
(强调我的)
extract(week ...)
always returns the ISO week。如果你想让to_char()
也返回ISO周,你需要使用'IW'
代替。如果你还想用to_char()
显示年份,你应该使用'IYYY'
而不是'YYYY'
,相当于extract(isoyear ...)