我一直在对按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');
我主要担心的是,我缺少这种差异的某些充分原因...
答案 0 :(得分:3)
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 ...)