powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как постгрес считает недели в году?
12 сообщений из 12, страница 1 из 1
как постгрес считает недели в году?
    #32831275
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select date_part('week'::text, '01/3/2005'::date);
выдает первую неделю. Но принято считать что в году 52 недели, то есть первое число это должна быть первая неделя в году.

А вообще какими-нибудь настройками это можно регулировать?
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32832503
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда.
Действительно интересно считает!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select date_part('week', '12/31/2004'::date);
 53 
select date_part('week', '01/01/2005'::date);
 53 
select date_part('week', '01/02/2005'::date);
 53 
select date_part('week', '01/03/2005'::date);
 1 
То есть получилось, что 31 декабря, 1 и 2 января это 53-яя неделя 2004 года.
А 3-ее января 1-ая неделя 2005.
Это, кстати, начало первой полной недели.
Может дело в этом.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32833211
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем странно все это. Я бы предпочел знать как это дело можно настраивать, а то малоли что.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32834638
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mwolfМда.
Действительно интересно считает!!!


Это чтобы было еще интереснее ;)

template1=# select date_part('week', '01/03/2005'::date);
LOG: statement: select date_part('week', '01/03/2005'::date);
LOG: statement: select pg_catalog.date_part($1, cast($2 as timestamp without ti
me zone))
CONTEXT: SQL function "date_part" during startup
date_part
-----------
1
(1 row)

template1=# select date_part('week', '12/31/2004'::date);
LOG: statement: select date_part('week', '12/31/2004'::date);
LOG: statement: select pg_catalog.date_part($1, cast($2 as timestamp without ti
me zone))
CONTEXT: SQL function "date_part" during startup
date_part
-----------
53
(1 row)

template1=# select version()
template1-# ;
LOG: statement: select version()
;
version

--------------------------------------------------------------------------------
--------------------------
PostgreSQL 8.0.0beta2 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.2.3 (
mingw special 20030504-1)
(1 row)

template1=#
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32834907
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ilejn:
Ну и?
И как это спасёт отца русской демократии?
Судя по описанию:
Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE FUNCTION "pg_catalog"."date_part" (text, timestamptz) RETURNS double precision AS'
timestamptz_part
'LANGUAGE 'internal' STABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER;

COMMENT ON FUNCTION "pg_catalog"."date_part"(text, timestamptz)
IS 'extract field from timestamp with time zone';
лезть надо в сорцы, чего делать как-то не хоцца.
Э-эх... (((
Ещё идеи есть у кого?
Или может кто есть менее ленивый чем я? ;-)
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32834964
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mwolf2 ilejn:
Ну и?
И как это спасёт отца русской демократии?


Я так понимаю, что тебя смутил вывод логов, но я всего
лишь хотел показать, что
в восьмой версии date_part('week',...) работает в полном
соответствии с интуитивными ожиданиями,
возвращая 1 для первого января 2005 года.

Спасет ли это отца русской демократии и одинаковы ли у нас
представления о правильной работе этой функции я не знаю.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32835652
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilejn
Я так понимаю, что тебя смутил вывод логов, но я всего
лишь хотел показать, что
в восьмой версии date_part('week',...) работает в полном
соответствии с интуитивными ожиданиями,
возвращая 1 для первого января 2005 года.


Ээээ.
Ну меня смутить это ещё постараться надо. Но дело не в этом.
Вот твой пример с вырезаными логами.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
select date_part('week', '01/03/2005'::date);
 date_part
-----------
 1 
( 1  row)

select date_part('week', '12/31/2004'::date);
 date_part
-----------
 53 
( 1  row)
Есть проверка за 03 января 2005 года и проверка за 31 декабря 2004 года. За 01 января 2005 года проверки я не вижу.
Кстати, эти же данные и у меня в версии 7.3.4.

Фишка вся в том, что неделя с 1-ым и 2-ым января, по моим представлениям, должна иметь номер 1 в 2005 году (она же 53-яя неделя в 2004 году для 31 декабря). Но Постгрес на дату 01 января 2005 года выдаёт, что это 53-яя неделя, а на 03 января 2005 года, что это 1-ая неделя (как и у тебя).
Или я не правильно понимаю нумерацию недель, или Постгресс чего-то не то выдаёт.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32835730
nostromo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из документации к date_part:

The number of the week of the year that the day is in. By definition (ISO 8601), the first week of a year contains January 4 of that year. (The ISO-8601 week starts on Monday.) In other words, the first Thursday of a year is in week 1 of that year. (for timestamp values only)

Т.е. в соответствии с вышеуказанным стандартом, первой неделей считается та, которая содержит первый четверг года.

А вот какой стандарт действует в России, я не знаю, но возможно, и не "интуитивный" :)
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32836693
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проверка за 03 января 2005 года и проверка за 31 декабря 2004 года. За 01 января 2005 года проверки я не вижу.
Кстати, эти же данные и у меня в версии 7.3.4.


Был неправ. Sorry.
1 января 53-я неделя и в восьмой версии тоже.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32836795
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда.
Есть такой стандарт - ISO 8601. И Постгрес его поддерживает.
Советского стандарта на эту тему я так и не нашёл.
Зато провёл небольшое исследование СУБД на которых идут проекты у нас в фирме:

Постгресс использует стандарт ISO 8601. Кстати, Делфи - тоже
МС СКЛ говорит , что 1-ое января по любому первая неделя, следующая неделя начиная с воскресенья - 2-ая и тд
Оракл говорит, что с 1-го по 7-ое января первая неделя, с 8-го по 14 - вторая

Короче говоря - что хочу, то и верчу.
Если в программах с БД прийдётся использовать номер недели - отмазывайтесь люди добрые, ибо чревато при переносе.

P.S. Надо будет ещё и МайСКЛ проверить.
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32879757
1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГОСТ по определению времени
http://www.bibliography.ru/method/gosts/7-64/7_64.htm

первая неделя - содержащая четверг
...
Рейтинг: 0 / 0
как постгрес считает недели в году?
    #32881075
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1234ГОСТ по определению времени
http://www.bibliography.ru/method/gosts/7-64/7_64.htm

первая неделя - содержащая четверг

Вот, блин.
Как ты его нарыл?
Искал-искал, ничего не нашёл.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как постгрес считает недели в году?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]