2010-04-22 51 views
3

我想從表中獲取一些記錄,但是當我使用OR而不是AND時,它會返回幾條記錄,但在其他情況下不會返回。 確切的日期是存在於表中。我在做什麼錯誤?爲什麼日期比較在SQL不起作用。請幫助

select newsid,title,detail,hotnews 
from view_newsmaster 
where datefrom>=CONVERT(datetime, '4-22-2010',111) 
    AND dateto<=CONVERT(datetime, '4-22-2010',111) 

回答

2

我覺得你有你「從」和「到」南轅北轍......

select newsid,title,detail,hotnews from view_newsmaster 
where dateto>=CONVERT(datetime, '4-22-2010',111) AND datefrom<=CONVERT(datetime, '4-22-2010',111) 
0

當您使用AND,你會得到兩個日期(在這種情況下,在同一日期)之間的日期。

當您使用OR時,您會得到大於第一個和第二個的日期。

他們是兩種不同的條件,所以它的理由是你的結果會不同。

你想達到什麼目的?這個查詢應該返回什麼?

2

很難不從表中的任何典型的數據說。

我會檢查多少記錄有datefrom大於dateto價值 - 它看起來很奇怪,我 - 這可能是一個原因,與AND查詢不返回任何東西。

嘗試CONVERT(datetime, '4-23-2010',111)替換dateto價值 - 保持介意CONVERT(datetime, '4-22-2010',111) 是午夜22ed月(一天的開始),一天不結束。

1

這是因爲日期意味着時間00:00:00,而不指定時間將排除那些在一天中的記錄,但技術上在範圍內。

指定時間:

where datefrom>=CONVERT(datetime, '4-22-2010 00:00:00',111) 
    AND dateto<=CONVERT(datetime, '4-22-2010 23:59:59',111) 

或者更好的是,使用BETWEEN操作:

where fDateField BETWEEN '4-22-2010' AND '4-23-2010' 

注二等日期是如何日期+ 1,也就是第二天,這基本上是迄今爲止23 :59:59