PostgreSQL 灵活定义每月第一周:根据长度调整命名
可以使用EXTRACT函数来获取当前月份的第一天是星期几,然后根据这个值来判断第一周的长度。
以下是一个示例代码:
-- 获取当前月份的第一天是星期几
SELECT EXTRACT(DOW FROM DATE_TRUNC('month', CURRENT_DATE)) AS first_day_of_month;
-- 判断第一周的长度
WITH cte AS (
SELECT
CASE
WHEN EXTRACT(DOW FROM DATE_TRUNC('month', CURRENT_DATE)) <= 5 THEN 12
ELSE 7 + EXTRACT(DOW FROM DATE_TRUNC('month', CURRENT_DATE))
END AS first_week_length
)
SELECT
CASE
WHEN EXTRACT(DAY FROM CURRENT_DATE) <= cte.first_week_length THEN '第一周'
ELSE '第二周'
END AS week_name
FROM cte;
首先,使用EXTRACT函数获取当前月份的第一天是星期几。如果第一天是星期一到星期五(DOW的值为0到4),则第一周的长度为12天(包括第一天)。否则,第一周的长度为7天加上第一天的星期数。
然后,使用CTE将第一周的长度存储为一个临时变量。最后,根据当前日期和第一周的长度来判断当前是第几周,并命名为'第一周'或'第二周'。
原文地址: https://www.cveoy.top/t/topic/npOK 著作权归作者所有。请勿转载和采集!