2014-02-13 75 views
0

我有一個表有兩列,我用它來定義我的結果。一個是開始日期,另一個是結束日期。在做查詢時,我使用了兩個不同的查詢。我有一個清晰的瞭解:Sql DB2 BETWEEN

START DATE BETWEEN 2/1/2014 and 2/10/2014 
or FINISH DATE BETWEEN 2/1/2014 and 2/10/2014 

但是有人給我發送了下列內容,我不能完全理解它。低於與上面的一樣嗎?如果是的話,我會得到不同的結果。

2/1/2014 BETWEEN START DATE AND FINISH DATE 

或2/10/2014在開始日期和結束日期之間。

我是一個noob和任何幫助,將不勝感激。

+0

試着忘記你正在查看SQL;想象它是英語(它幾乎是這樣)。如果你的開始日期是在一月份,而你的結束日期是在三月份,那麼每種情況下的真實陳述是什麼? – mustaccio

+2

不是你的實際問題,但[你應該完全避免使用BETWEEN](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil- have-in-common.aspx)(DB2允許您定義時間戳類型的小數秒數)。同樣的推理也適用於所有非積分計數,所以請始終明確限定您的範圍。 –

+0

這兩個查詢是不同的,但我們不知道你在查詢什麼,所以它可能不是你想要的。我的意思是你也可以嘗試'START_DATE

回答

1

查詢是不同的。

您正在尋找

StartDate首先查詢是'02/01/2014''02/10/2014'EndDate之間OR
'02/01/2014''02/10/2014'之間

如果兩列之一是那些行將返回的日期之間。

第二個查詢您正在尋找

'02/01/2014'StartDateEndDate'02/10/2014'之間OR
StartDateEndDate

之間

這將返回不同的行集,因爲你只是在尋找記錄中發生在特定的時間範圍內。因此,所有在 '02/01/2014'之前或之前的 STARTED以及將在其之後或之後返回的所有行或者在 '02/10/2014'之前或之後 STARTED以及在其之後或之後結束的所有行。這是查看數據的非常糟糕的方式。您應該忽略第二個查詢並堅持使用第一個查詢。

+0

這是'BETWEEN',所以「在或之前」(或「在或之後」),但是。我也會避開第二個版本,尤其是因爲它不太可能獲得正確的值範圍。 –