SingleStore中DATEDIFF与TIMESTAMPDIFF参数处理为何不一致?
MySQL中TIMESTAMPDIFF与DATEDIFF的参数顺序差异原因
这两个函数的参数顺序和计算逻辑差异,本质是设计定位和历史遗留的结果:
函数设计逻辑的本质区别
- TIMESTAMPDIFF:第一个参数是指定的时间单位(比如DAY、HOUR),后续两个参数分别是
起始时间和结束时间,计算逻辑为结束时间 - 起始时间。比如执行SELECT TIMESTAMPDIFF(DAY, '2014-12-04', '2014-12-05') as DAYS_DIFF,就是计算从2014-12-04到2014-12-05的天数跨度,结果为1,符合“从A到B经过X天”的常规表述逻辑。 - DATEDIFF:没有额外的单位参数,仅接收两个日期参数,计算逻辑为
第一个参数日期 - 第二个参数日期。执行SELECT DATEDIFF('2014-12-04', '2014-12-05') as DAYS_DIFF时,就是用2014-12-04减去2014-12-05,结果为-1,贴近传统数学减法的被减数在前的逻辑。
不一致性的核心原因
- 定位不同:TIMESTAMPDIFF是通用型多单位时间差函数,面向更复杂的时间跨度计算场景,参数顺序遵循人类描述时间区间的自然逻辑;DATEDIFF是早期推出的简化版天数差函数,侧重快速计算两个日期的天数差值,参数顺序沿用数学减法的被减数在前的逻辑。
- 历史遗留:两个函数并非同一时期开发,MySQL在函数迭代过程中没有强行统一参数顺序,而是保留了各自的设计初衷,官方文档也明确标注了每个函数的参数含义,使用时需要注意区分。
内容的提问来源于stack exchange,提问作者Gopick
相关产品推荐
相关产品推荐

