将Hana中含INTERVAL '1 day'的日期计算语句转换为SQL Server语法
原Hana语法逻辑解释
INTERVAL '1 day'是Hana中代表1天时间间隔的常量,与数值类型的B."ZBD1T"相乘的作用是把数字转换为对应天数的时间间隔:比如B."ZBD1T" = 67时,运算后就得到67天的时间间隔,等同于直接给日期加67天。- 整段Hana逻辑的完整执行流程是:
- 给基准日期
B."ZFBDT"加上B."ZBD1T"对应的天数 - 把计算结果转换为
DATE类型,清除所有时分秒信息,仅保留日期部分 - 拼接固定时间
23:59:59,最终得到目标日期当天最后一秒的完整时间戳
- 给基准日期
- 你给出的示例计算是对的:2020-10-30加67天确实为2021-01-05,拼接时间后结果和你贴的
RES完全一致。
SQL Server 等价实现代码
SQL Server没有INTERVAL语法,日期加减统一使用DATEADD函数实现,以下是完全等价的写法:
-- 写法1:兼容SQL Server 2008及以上版本,逻辑和原代码完全对应 CAST(CAST(DATEADD(DAY, B.ZBD1T, B.ZFBDT) AS DATE) AS DATETIME) + CAST('23:59:59' AS DATETIME) -- 写法2:更严谨的避免时间精度问题写法,运算结果一致 DATEADD(SECOND, 86399, CAST(DATEADD(DAY, B.ZBD1T, B.ZFBDT) AS DATE))
两种写法代入你的示例参数都会返回2021-01-05 23:59:59,和原Hana逻辑效果完全相同。
内容的提问来源于stack exchange,提问作者Federicofkt
相关产品推荐
相关产品推荐

