假设我有一系列名为name_YYYY_WW
的SQL表,其中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
,就像我现在将结果汇总到形成表的查询。
这个问题有什么优雅的解决方案吗?
答案 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;