2013-02-15 95 views
1

可能這是一個簡單的答案,但我不知道,我該如何確保出發日期爲抵達後。出發日期後到達日期

感謝

韋恩

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

回答

1

您可以通過使用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

0

我認爲最簡單的方法是使用case聲明:

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

這也具有標準語法的優點,並被alm理解所有數據庫。 (你的問題沒有提到你正在使用的數據庫。)

相關問題