SQL如何计算efdt字段前一日日期作为PreviousDay列结果
计算
PreviousDay列的实现方案 核心要求:PreviousDay列返回efdt字段存储日期的前1个自然日,例:efdt值为2001-04-02时,PreviousDay返回2001-04-01,与示例中DATEDIFF计算值334的计算基准对齐。
不同数据库的具体实现写法如下:
- MySQL / MariaDB
调用内置日期偏移函数即可,支持自动处理跨月、跨年、闰年的日期计算:
也可以直接用简化算术写法:SELECT *, DATE_SUB(efdt, INTERVAL 1 DAY) AS PreviousDay FROM 你的表名;efdt - INTERVAL 1 DAY AS PreviousDay,返回结果完全一致。 - SQL Server
使用DATEADD函数做日维度偏移:SELECT *, DATEADD(DAY, -1, efdt) AS PreviousDay FROM 你的表名; - PostgreSQL
支持日期类型直接做算术运算,若需要返回纯日期格式(不带时分秒)可以加类型转换:SELECT *, (efdt - 1)::DATE AS PreviousDay FROM 你的表名; - Oracle
日期类型直接减数值1即为往前推1天:SELECT t.*, efdt - 1 AS PreviousDay FROM 你的表名 t;
校验提示:以上写法均会自动处理特殊日期的偏移逻辑,无需手动判断当月天数,例如
2024-01-01偏移1天会返回2023-12-31,2024-03-01偏移1天会返回2024-02-29,符合自然日计算规则。
内容的提问来源于stack exchange,提问作者NAT
相关产品推荐
相关产品推荐

