出发日期后到达日期

出发日期后到达日期

问题描述:

可能这是一个简单的答案,但我不知道,我该如何确保出发日期为抵达后。出发日期后到达日期

感谢

韦恩

DATEADD(day, ABS(CHECKSUM(NEWID()) % 365), '1 Jan 2010') as ArrivalDate, 
DATEADD(day, ABS(CHECKSUM(NEWID()) % 365), '1 Jan 2010') as DepatureDate, 
+2

你是什么意思?您是否希望防止在不符合条件的情况下插入记录?你想排除不符合条件的结果吗?您是否希望查询使用出发和到达日期的后期? – 2013-02-15 14:04:45

+0

添加更多天,以便在您抵达ArrivalDate之前添加更多出发日期。您应该probaly *也*在基表上有一个CHECK约束。 – 2013-02-15 14:05:22

+0

您好马林/嘘声 如果我到达01/01/2010出发日期只能=> 02/01/2010,所以当数是随机生成的只会做到这一点。 – wafw1971 2013-02-15 14:11:05

您可以通过使用DATEDIFF ('day', DepatureDate, ArrivalDate)检查。

这样,您就可以减去从DepatureDate的ArrivalDate。如果您得到否定答案,则在ArrivalDate之前设置DepatureDate。

看一看这个链接:

DATEDIFF

编辑:

DECLARE @var1 int; 
DECLARE @var2 int; 
SET @var1 = ABS(CHECKSUM(NEWID()) % 365); 
SET @var2 = ABS(CHECKSUM(NEWID()) % ([email protected])); 
select @var1, @var2, DATEADD(day, @var1, '1 Jan 2010') as ArrivalDate, DATEADD(day, @var2, DATEADD(day, @var1, '1 Jan 2010')) as DepatureDate 
+0

嗨Wessel 我了解Datediff,但是您可以在随机生成离开日期时使用吗? – wafw1971 2013-02-15 14:13:33

+0

啊我看到你想要什么,试着玩设置变量。此代码似乎工作得很好:请参阅我的答案 – Wessel 2013-02-15 14:52:35

我认为最简单的方法是使用case声明:

(case when ArrivalDate < DepartureDate then 1 else 0 end) as IsArrivalBefore 

这也具有标准语法的优点,并被alm理解所有数据库。 (你的问题没有提到你正在使用的数据库。)