You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL中按四月至四月日历计算日期所属周数

验证自定义财年(4月-次年3月)周数计算SQL的方法

核心验证步骤

  1. 明确周数规则细节
    先确认你的SQL逻辑中两个关键规则:

    • 每周起始日:是周一还是周日?不同SQL方言的WEEK类函数默认规则差异很大,比如MySQL的WEEK()有8种模式可选
    • 第1周定义:是包含4月1日的周,还是当年4月第一个完整的周?
  2. 覆盖关键测试场景
    针对以下边界日期编写测试用例,确保逻辑无遗漏:

    • 财年起始日:如2023-04-012024-04-01
    • 财年结束日:如2024-03-312025-03-31
    • 跨财年日期:如2024-03-30(属于2023/24财年)、2024-04-02(属于2024/25财年)
    • 含53周的特殊财年:比如财年起始日为周一,或整个财年有366天且第一周起始日较早的情况(例如2020/21财年:2020-04-01是周三,2021-03-31是周三,全年366天,对应53周)
  3. 逐例对比验证
    对每个测试用例,先手动计算预期周数,再对比SQL输出:

    • 步骤1:确定日期所属财年:若my_date月份≥4,财年为YEAR(my_date);否则为YEAR(my_date)-1
    • 步骤2:找到该财年的第一天(财年-04-01)和最后一天(财年+1-03-31
    • 步骤3:计算my_date与财年第一天的天数差,结合每周起始日规则推导周数
    • 步骤4:将手动结果与SQL输出逐一对比,所有用例匹配则逻辑正确

示例验证流程

假设你的SQL逻辑如下(以MySQL为例):

SELECT
    my_date,
    -- 计算财年归属
    CASE WHEN MONTH(my_date) >= 4 THEN YEAR(my_date) ELSE YEAR(my_date) - 1 END AS fiscal_year,
    -- 以周一为周起始,包含4月1日的周为第1周
    WEEK(DATE_ADD(my_date, INTERVAL (4 - MONTH(my_date)) MONTH), 1) AS fiscal_week
FROM some_table;

对应测试用例及预期:

my_date预期fiscal_year预期fiscal_week
2023-04-0120231
2024-03-31202352
2024-04-0120241
2020-03-31201953

将测试数据插入some_table后执行SQL,对比输出与预期结果即可完成验证。

内容的提问来源于stack exchange,提问作者stats_noob

火山引擎 最新活动