2017-04-06 76 views
0

我有點糊塗評估將下面的語句在SQL語句:需要幫助評估

AND getdate() BETWEEN fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01') 

每當我想要得到的日期範圍爲列說,員工的StartDate,我會做這樣的事情:

AND StartDate BETWEEN fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01') 

有人可以幫我理解差異嗎?

謝謝。

+0

什麼是真正的問題,您StartDate的價值什麼不清楚給你? –

+0

不妨說明你在做什麼......看看你實際上在看員工主人和職業史的結構 – maSTAShuFu

+0

Hi Tim/rhian, 我不確定第一個陳述是如何評估的?我得到第二個陳述,即基本上開始日期列的記錄將返回落在fti.effectivestart和isnull之間(fti.effectiveend,'2050-01-01') –

回答

0

2個語句之間的唯一區別是,一個是針對當前日期(getdate()),另一種是針對給定的日期(StartDate)比較比較。

也就是說,第一個發言的驗證,如果執行的當前日期(現在)是between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')

而第二個將驗證對條件between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')

0

這兩條語句都返回一個在某個時間點有效的記錄。

第一個評估當前時間。這是getdate()返回的內容。

第二種方法的評估結果爲StartDate,每一行可能不同。

難道你對此感到困惑嗎?

一對夫婦的注意事項:

  • coalesce()通常(但並不總是)最好isnull()是因爲前者是ANSI標準。
  • 如果你的效果和結束日期是日期(沒有時間分量),那麼你可能想要cast(getdate() as date)
  • 使用日期時需要注意between。我假設這張桌子是按照預期設計的。
+0

嗨Gordon感謝您的迴應。是的,所以我只是試圖運行一個sql語句,我得到了重複的記錄返回。我的朋友建議我使用AND getdate()BETWEEN fti.effectivestart AND isnull(fti.effectiveend,'2050-01-01') 但我不確定如何評估它。 –

+0

@JackJames。 。 。您可能會得到重複的記錄,因爲'between'是比較日期的錯誤方法。您可以使用示例數據詢問*另一個*問題,並顯示生成重複項的示例數據。 –

+0

@GordonLinoff「之間是比較日期的錯誤方法。」謹慎闡述? – artm