我有一个表(sometable)中有一列(somecolumn),其格式如下(DATE):2025-01-01 00:00:00
使用 SQL,我想要创建以下两列:
1)根据四月-四月日历提取月份数字,即四月=1,五月=2,......
2)按照四月-四月日历确定年份,即2025年1月1日属于2024-2025年。
第一个很容易手动完成:
SELECT
CASE
WHEN EXTRACT(MONTH FROM somedate) = 4 THEN 1
WHEN EXTRACT(MONTH FROM somedate) = 5 THEN 2
WHEN EXTRACT(MONTH FROM somedate) = 6 THEN 3
WHEN EXTRACT(MONTH FROM somedate) = 7 THEN 4
WHEN EXTRACT(MONTH FROM somedate) = 8 THEN 5
WHEN EXTRACT(MONTH FROM somedate) = 9 THEN 6
WHEN EXTRACT(MONTH FROM somedate) = 10 THEN 7
WHEN EXTRACT(MONTH FROM somedate) = 11 THEN 8
WHEN EXTRACT(MONTH FROM somedate) = 12 THEN 9
WHEN EXTRACT(MONTH FROM somedate) = 1 THEN 10
WHEN EXTRACT(MONTH FROM somedate) = 2 THEN 11
WHEN EXTRACT(MONTH FROM somedate) = 3 THEN 12
END AS new_month
FROM sometable;
第二个更令人困惑。我尝试通过将月份分为(一月至三月等)来思考其中的逻辑:
CASE
WHEN EXTRACT(MONTH FROM somecolumn) <= 3
THEN (EXTRACT(YEAR FROM somecolumn) - 1) || '-' || EXTRACT(YEAR FROM somecolumn)
ELSE EXTRACT(YEAR FROM somecolumn) || '-' || (EXTRACT(YEAR FROM somecolumn) + 1)
END AS new_year
FROM sometable;
这是正确的逻辑吗?
我认为您提议的内容已经按预期工作了。小变化是您需要将年份转换为 VARCHAR,因为您要
-
在 new_year 列中连接字符串 ( )。另一种查找新月份的方法是使用模数将年份的开始日期移至 4 月,方法是将月份数字加 8,然后除以 12,如下所示
然后你可以使用它来计算新年,就像你已经做的那样
示例查询
小提琴
输出
据我所知,
EXTRACT
2019 年或 2022 年不受支持。(请查看 MS SQL Server 文档以确保无误。)您可以使用它DATEPART()
从数据类型中获取日、月、季度、年DATE, DATETIME
。