时间戳差值的类型是否始终为INTERVAL DAY TO SECOND?
时间戳差值的INTERVAL类型确定性问题
你通过以下SQL观察到时间戳与日期的差值类型为INTERVAL DAY TO SECOND:
select typeof(getdate() - current_date()) ----------------------------------------- interval day to second
针对你关心的「该类型是否有官方保证、会不会随输入变化」的问题,给出以下结论:
- 这个场景下的返回类型是固定的,不会随输入值变化变为
DAY TO MINUTE或YEAR TO MONTH。 - 原因很直接:
getdate()返回带时分秒精度的日期时间类型,current_date()返回仅含年月日的日期类型,二者相减计算的是「具体时间点到当日零点的时间差」,天然需要包含天、时、分、秒的精度,因此数据库会固定使用INTERVAL DAY TO SECOND类型来承载结果。
关于官方保证:虽然你没找到明确文档说明,但从数据库运算的逻辑一致性原则来看,同类型的运算(日期时间值 - 日期值)必然会返回固定类型的间隔结果——如果返回类型随输入波动,会导致依赖该类型的CAST转换、函数调用等逻辑出现不可预期的错误,这是数据库设计中会严格避免的情况。
至于你关注的CAST转换问题:由于INTERVAL DAY TO SECOND的最小单位是秒,CAST(该间隔 AS 数值类型)会直接返回总秒数,这个逻辑是稳定可靠的,不需要担心因类型变化导致结果单位改变。
注:你提到的其他转秒数的方法,本质上也是基于这个固定间隔类型的特性实现的,只是实现形式不同。
内容的提问来源于stack exchange,提问作者greatvovan
相关产品推荐
相关产品推荐

