以天为单位的 SQL 日期差异结果错误

标签 sql sql-server date datetime

我想计算两个日期之间的天差。

当我计算 '2017-01-01' 和 '2018-01-15' 之间的 Differane 时,它​​是 379 天。

SELECT DATEDIFF(DD,'2017-01-01','2018-01-15') 

但是当我用加法将日期分成两部分时,我得到了结果 378。
select DATEDIFF( DD,'2017-01-01', '2017-12-31') + DATEDIFF( DD,'2018-01-01', '2018-01-15') 

谁能解释一下为什么会这样?

最佳答案

这是非常简单的数学:

I:  <a,b>
II: <a,c>,<c+1,b>   where c is between a and b

I      II
b-a != b-(c+1) + c-a
b-a != b-c-1 + c-a
b-a != b-a-1       -- here is 1 missing day

为了使它正确,您可以使用:
select DATEDIFF( DD,'2017-01-01', '2018-01-01') 
     + DATEDIFF( DD,'2018-01-01', '2018-01-15') 

关于以天为单位的 SQL 日期差异结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50621881/

相关文章:

php - MySQL从一张表读取到另一张表

c# - 如何减少远程 SQL Server 负载?

sql-server - 其中 IN 逗号分隔的字符串

sql - Stack Overflow 数据库 - 成对的用户系统地评论相同的帖子

sql - 如果外键不存在,那么在不使用名称的情况下添加外键约束(如果存在,则删除外键约束)?

sql - 如何使用INSERT INTO + SELECT FROM插入自定义值?

php - 我如何以传统的 'time' 增量进行 ORDER BY,一个值字符串,ex : "10:00 AM", 来自不是 date() 格式的数据库条目?

mysql - 将日期插入数据库时​​出现 SQL 语法错误(框架 : codeigniter)

javascript - 将时间戳四舍五入到最接近的日期

SQL 语法作为 MySQL 例程的参数?