修正T-SQL中东正教复活节日期计算错误的技术问询
东正教复活节日期计算的T-SQL转换错误排查
你的T-SQL代码存在三个关键错误,导致计算结果偏差:
- 核心变量误用:原Python代码中计算日期的核心是基于变量
e(对应你的@local_FIX_2)取模31,但你错误地使用了@local_FIX_1(对应Python的d)来计算日期,这是最主要的错误。 - 语法冗余:声明
@local_EASTERN_EASTER_MONTH的语句末尾多了一个多余的},会导致语法报错。 - 布尔值转数值的逻辑缺失:Python中
(m>4)会自动转为1(True)或0(False),但T-SQL里需要显式转换这个判断的结果为数值。
修正后的T-SQL代码
DECLARE @param_YEAR_NUMBER SMALLINT = 2025; DECLARE @local_FIX_1 TINYINT = ((@param_YEAR_NUMBER % 19) * 19 + 15) % 30; DECLARE @local_FIX_2 INT = ((((@param_YEAR_NUMBER % 4) * 2) + ((@param_YEAR_NUMBER % 7) * 4) - @local_FIX_1 + 34) % 7) + @local_FIX_1 + 127; DECLARE @local_EASTERN_EASTER_MONTH TINYINT = @local_FIX_2 / 31; DECLARE @local_EASTERN_EASTER_DAY TINYINT = (@local_FIX_2 % 31) + 1 + IIF(@local_EASTERN_EASTER_MONTH > 4, 1, 0); IF (@local_EASTERN_EASTER_DAY > 30) BEGIN SET @local_EASTERN_EASTER_DAY = 1; SET @local_EASTERN_EASTER_MONTH = 5; END; -- 输出结果 SELECT @local_EASTERN_EASTER_DAY AS EasterDay, @local_EASTERN_EASTER_MONTH AS EasterMonth, @param_YEAR_NUMBER AS EasterYear;
运行这段代码后,2025年的结果会正确返回4月20日。
内容的提问来源于stack exchange,提问作者Laura Lobo
相关产品推荐
相关产品推荐

