2016-10-23 2 views
1

В PostgreSQL я пытаюсь преобразовать временные метки в числовые числа, используя запрос ниже.Postgresql Неделя номер для дат Jan и Dec

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 года одинаково. Может ли кто-нибудь объяснить логику здесь?

ответ

2

Я думаю, что documentation объясняет это довольно хорошо:

неделю

Номер ISO 8601 неделя нумерования недели года. По определению , начало ISO начинается по понедельникам и первой неделе года содержит 4 января того же года. Другими словами, первый четверг в год находится на 1-й неделе этого года.

В системе недельных нумерации ISO, можно для начала января даты, чтобы стать частью 52-я или 53-я недели прошлого года, и для позднего декабря дата, чтобы быть частью первой недели в следующем году. Например, 2005-01-01 является частью 53-й недели 2004 года и 2006-01-01 является частью 52-й недели 2005 года, а 2012-12-31 - - часть первой недели 2013. Рекомендуется использовать поле isoyear вместе с неделей, чтобы получить согласованные результаты.

Смежные вопросы