Where子句中的日期差异

时间:2017-06-19 18:17:23

标签: sql-server datediff

我正在使用SQL服务器。我试图给出一个条件,它给出了日期差异在0-3之间的行,或者如果在迁移日期后0-3天打开了某些东西。

当我将条件添加到WHERE子句时,它表现得很好玩。我需要帮助找出最佳方法

这给我一个结果,其中日期差异小于0,即使我说> = 0

print_r

这给我一个结果,其中日期差异大于4,即使我说< 4

select * from table_1 
where datediff(day, a.[opened date], d.[UserMigratedDate]) >= 0 

当我使用它之间时它会注意到。我做错了吗?

select * from table_1 
where datediff(day, a.[opened date], d.[UserMigratedDate]) < 4

1 个答案:

答案 0 :(得分:1)

我希望看到导致此问题的测试数据...因为where子句是正确构造的。以下面的情况为例。将返回ID 2-5。此外,您所看到的第一个datediff()日期是&gt; = 0是没有意义的,除非有人可以在打开之前迁移某些内容...

http://rextester.com/UTLX59878

declare @table table (id int, openedDate datetime, UserMigratedDate datetime)
insert into @table
values
(1,'2017-01-01','2016-12-31'), --this technically shouldn't happen
(2,'2017-01-01','2017-01-01'), 
(3,'2017-01-01','2017-01-02'),
(4,'2017-01-01','2017-01-03'),
(5,'2017-01-01','2017-01-04'),
(6,'2017-01-01','2017-01-05')

select
    *,
    datediff(day, openedDate, UserMigratedDate) as theDateDiff
from @table
where 
   datediff(day, openedDate, UserMigratedDate) >= 0 
   and
   datediff(day, openedDate, UserMigratedDate) < 4