Проблема при извлечении номера года и недели из строки в PSQL - PullRequest
7 голосов
/ 18 мая 2011

Допустим, у меня есть диапазон таблиц SQL с именем name_YYYY_WW, где YYYY = год и WW = номер недели.Если я вызываю функцию, которая направляет определенную пользователем дату в правую таблицу.

Если введена дата "20110101":

SELECT EXTRACT (WEEK FROM DATE '20110101'), возвращает 52 и

SELECT EXTRACT (YEAR FROM DATE '20110101') возвращает 2011.

Хотя с этими результатами все в порядке, я хочу, чтобы "20110101" указывал либо на таблицу name_2010_52, либо name_2011_01, а не name_2011_52, как это происходит сейчас, когда я собираю результатысформировать запрос к таблице.

Какие-нибудь изящные решения этой проблемы?

Ответы [ 2 ]

16 голосов
/ 09 января 2012

Функция to_char () позволит вам отформатировать дату или метку времени для вывода правильных значений изо недели и изо года.

SELECT to_char('2011-01-01'::date, 'IYYY_IW') as iso_year_week;

произведет:

 iso_year_week 
---------------
 2010_52
(1 row)
0 голосов
/ 18 мая 2011

Вы можете использовать СЛУЧАЙ:

WITH sub(field) AS (
    SELECT CAST('20110101' AS date) -- just to test
)
SELECT 
    CASE 
        WHEN EXTRACT (WEEK FROM field ) > 1 AND EXTRACT (MONTH FROM field) = 1 AND EXTRACT (DAY FROM field) < 3 THEN 1
    ELSE
        EXTRACT (WEEK FROM field)
    END
FROM 
    sub;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...