You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server基于dimCalendar表的工作日计算自定义函数开发

修复后的SQL Server工作日计算函数

原代码存在硬编码覆盖参数、循环逻辑语法错误且效率低下、未正确累加工作日总数等问题。基于你的需求,以下是正确的实现:

CREATE FUNCTION [udf_WorkingDays] 
(
    @StartDate DATETIME,
    @EndDate DATETIME
) 
RETURNS INT
AS
BEGIN
    -- 处理起始日期大于结束日期的异常情况,返回0
    IF @StartDate > @EndDate
        RETURN 0;

    DECLARE @TotalDays INT;

    -- 直接查询维度表中日期范围内的工作日总数
    SELECT @TotalDays = SUM(WorkingDay)
    FROM [XS].[dimCalendar]
    WHERE [Date] >= @StartDate
      AND [Date] <= @EndDate;

    -- 如果没有匹配的日期(比如超出2020-2040范围),返回0
    RETURN ISNULL(@TotalDays, 0);
END;

关键说明:

  • 保留传入的@StartDate和@EndDate参数,不再硬编码固定值,确保函数可复用任意日期范围。
  • 利用SUM(WorkingDay)直接计算工作日总数:因为WorkingDay是0(非工作日)或1(工作日),求和结果就是两个日期之间的工作日数量,避免了低效的循环遍历。
  • 增加异常处理:起始日期晚于结束日期时直接返回0,避免无效查询;用ISNULL处理超出维度表日期范围的情况,确保返回合法值。
  • 逻辑简洁高效,利用维度表预存数据直接统计,比循环写法性能提升显著,尤其适用于日期范围较大的场景。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:50:24