在PSQL中从字符串中提取年份和周数时出现问题

时间:2011-05-18 12:32:23

标签: postgresql datetime

假设我有一系列名为name_YYYY_WW的SQL表,其中YYYY =年和WW =周数。如果我调用一个将用户定义的日期引导到右表的函数。

如果输入的日期是"20110101"

SELECT EXTRACT (WEEK FROM DATE '20110101')返回52和

SELECT EXTRACT (YEAR FROM DATE '20110101')返回2011年。

虽然这些结果没有错,但我希望"20110101"指向表name_2010_52name_2011_01,而不是name_2011_52,就像我现在将结果汇总到形成表的查询。

这个问题有什么优雅的解决方案吗?

2 个答案:

答案 0 :(得分:16)

函数to_char()将允许您format a date or timestamp输出更正iso周 iso年。

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

将产生:

 iso_year_week 
---------------
 2010_52
(1 row)

答案 1 :(得分:-2)

您可以使用CASE:

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;