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



假设我有一系列名为 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当我合并结果以形成表的查询时。

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

函数 to_char() 将允许您格式化日期或时间戳以输出正确的 iso 周 iso 年。

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

将产生:

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

您可以使用 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;

相关内容

  • 没有找到相关文章

最新更新