在PostgreSQL中,我试图使用下面的查询将时间戳转换为周数。
select user_id,
time_stamp,
date(time_stamp),
EXTRACT(YEAR FROM time_stamp) as Year,
EXTRACT(MONTH FROM time_stamp) as Month,
EXTRACT(WEEK FROM time_stamp) as Week
from user_engagement
user_id | time_stamp | date | year | month | week
---------+---------------------+------------+------+-------+------
6282 | 2013-01-01 14:29:35 | 2013-01-01 | 2013 | 1 | 1
6282 | 2013-01-02 14:29:35 | 2013-01-02 | 2013 | 1 | 1
6282 | 2013-12-30 14:29:35 | 2013-12-30 | 2013 | 12 | 1
6282 | 2013-12-31 14:29:35 | 2013-12-31 | 2013 | 12 | 1
我很惊讶地看到2013年1月和12月的日期周数相同。有人可以解释这里的逻辑吗?
答案 0 :(得分:2)
我认为documentation很好地解释了这一点:
周
一年中ISO 8601周编号周数。通过 定义,ISO周从星期一开始,一年的第一周开始 包含那一年的1月4日。换句话说,第一个星期四 一年是在那一年的第1周。
在ISO周编号系统中,可能在1月初 日期是上一年的第52周或第53周的一部分,并且 12月下旬的日期将成为明年第一周的一部分。 例如,2005-01-01是2004年第53周的一部分,并且 2006-01-01是2005年第52周的一部分,而2012-12-31是 2013年第一周的一部分。建议使用isoyear 与周一起获得一致的结果。