2014-11-11 2 views
0

Мне нужно изменить дату начала недели с понедельника по субботу в PostgreSQL. Я пробовал SET DATEFIRST 6;, но он не работает в PostgreSQL. Пожалуйста, предложите решение для этого.Как изменить первый день недели в PostgreSQL

+0

Где в [руководстве] (http://www.postgresql.org/docs/current/static/index.html) вы нашли инструкцию 'set datefirst'? –

ответ

4

Похоже, что DATEFIRST - это вещь в Microsoft Transact-SQL.

Я не верю Postgres имеет любой точный эквивалент, но вы можете быть в состоянии его аппроксимировать.

Postgres поддерживает извлечение различных частей TIMESTAMP с помощью функции EXTRACT. Для ваших целей вы хотели бы использовать либо DOW, либо ISODOW.

DOW числа воскресенье (0) по субботу (6), в то время как ISODOW, который прилипает к стандарту 8601 в ISO, номера понедельника (1) по воскресенье (7).

От Postgres doc:

Эта:

SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); 

Возвращает 5, в то время как это:

SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); 

7 Возвращает.

Таким образом, вы должны использовать версию EXTRACT в своих запросах, чтобы получить номер дня недели. Если вы собираетесь использовать его во многих запросах, я бы порекомендовал creating a function, который бы централизовал запрос в одном месте и возвратил число, перенесенное так, как вы хотели бы, чтобы оно началось в субботу (транспозиция будет меняться в зависимости от того, какой метод нумерации вы использовали в EXTRACT). Затем вы можете просто вызвать эту функцию в любом SELECT, и она вернет транспонированный номер.

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