SQL中如何计算两个datetime类型列的时间差值
datetime类型时间差计算说明
- 直接用
original_due_date - due_date的写法不是所有数据库都兼容:PostgreSQL、Oracle等数据库支持datetime类型直接做减法,返回的时间间隔结果会自带天、时、分、秒信息,和你期望的输出格式一致,可以直接使用。 - 如果你使用的是MySQL、SQL Server这类不支持datetime直接减法返回时间间隔的数据库,需要调用对应内置函数实现需求:
- MySQL场景:如果只需要时分秒差值直接用
TIMEDIFF(original_due_date, due_date)即可;如果要包含天数的完整格式,可使用如下写法:SELECT *, CONCAT( TIMESTAMPDIFF(DAY, due_date, original_due_date), '天 ', TIMEDIFF(original_due_date, DATE_ADD(due_date, INTERVAL TIMESTAMPDIFF(DAY, due_date, original_due_date) DAY)) ) AS difference FROM `Table` - SQL Server场景:可使用
DATEDIFF配合日期部分提取实现:SELECT *, CONCAT( DATEDIFF(DAY, due_date, original_due_date), '天 ', DATEPART(HOUR, original_due_date - due_date), ':', RIGHT('0' + CAST(DATEPART(MINUTE, original_due_date - due_date) AS VARCHAR), 2), ':', RIGHT('0' + CAST(DATEPART(SECOND, original_due_date - due_date) AS VARCHAR), 2) ) AS difference FROM [Table]
- MySQL场景:如果只需要时分秒差值直接用
- 如果你需要的是纯数值类型的差值(比如相差总秒数、总小时数),可直接将时间差转换为对应单位:
例如计算总小时数:PostgreSQL用EXTRACT(EPOCH FROM (original_due_date - due_date))/3600,MySQL用TIMESTAMPDIFF(HOUR, due_date, original_due_date)。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

