我有一个
created_at
列,我想创建一个新列,其名称会根据 created_at
出现的周数递增。例如,我有列(时间戳格式):
created_at
------------
2024-04-08
2024-04-09
2024-04-13
2024-04-15
2024-04-16
2024-04-18
2024-04-22
2024-04-25
我想制作以下内容:
created_at | new_column
---------------------------------
2024-04-08 C10
2024-04-09 C10
2024-04-13 C10
2024-04-15 C11
2024-04-16 C11
2024-04-18 C11
2024-04-22 C12
2024-04-25 C12
目前我正在手动进行:
SELECT
created_at
, CASE
WHEN DATE_TRUNC('week', created_at)::DATE = '2024-04-08'::DATE THEN 'C10'
WHEN DATE_TRUNC('week', created_at)::DATE = '2024-04-15'::DATE THEN 'C11'
WHEN DATE_TRUNC('week', created_at)::DATE = '2024-04-22'::DATE THEN 'C12'
END AS new_columns
FROM my_table
但我想自动化它,而不是每次都创建一个新的
WHEN
语句。
使用
date_part
功能:
SELECT t, 'C' || date_part('week', t)::TEXT
FROM generate_series('2024-01-01'::timestamp, '2025-01-01'::timestamp, '3 day'::interval) AS t;
它返回周索引文本:
...
"2024-03-04 00:00:00" "C10"
"2024-03-07 00:00:00" "C10"
"2024-03-10 00:00:00" "C10"
"2024-03-13 00:00:00" "C11"
"2024-03-16 00:00:00" "C11"
"2024-03-19 00:00:00" "C12"
"2024-03-22 00:00:00" "C12"
"2024-03-25 00:00:00" "C13"
"2024-03-28 00:00:00" "C13"
...