2010-04-05 58 views
1

請幫我找出我的SQL查詢中的錯誤。我創建了這個查詢比較日期請告訴我什麼是我的日期比較錯誤sql查詢

select * from Joinplans jp 
where cast(convert(varchar,GETDATE(),103) AS datetime) BETWEEN  
    CASE(convert(varchar,jp.planstartDate,103) AS datetime) AND 
    CASE(convert(varchar,DATEADD(DAY,jp.planDays,jp.planstartDate),103) AS DATETIME) 

它給我的錯誤:

incorrect near 'AS'

我使用SQL Server 2005的

+0

我已經改變「CASE」到「CAST」,但仍然給我的錯誤: 仍然給我錯誤:將char數據類型轉換爲日期時間數據類型導致超出範圍的日期時間值。 – 2010-04-05 05:02:15

+0

plez告訴我是以這種方式比較日期的好方法,或者如果不是比較在這種情況下比較日期的好方法。 – 2010-04-05 05:02:53

+0

爲什麼要從日期時間轉換爲varchar,然後再轉換爲日期時間? – 2010-04-05 05:53:28

回答

1

如果planStartDate實際上是一個日期,那麼就沒有必要將它轉換爲字符列:現在

Select ... 
From Joinplans jp 
where GetDate() Between planStartDate And DateAdd(day, jp.planDays, jp.planStartDate) 

,如果planStartDate被存儲日期和時間數據,那麼你可能想使用的東西像:

Select ... 
From Joinplans jp 
Where planStartDate <= GetDate() 
    And GetDate() < DateAdd(day, jp.planDays + 1, jp.planStartDate) 

這確保了包括經由DateAdd函數計算的最後一天任何時候都

+0

planstartdate的數據類型是smalldatetime,我存儲的日期時間值,其中時間是00:00 – 2010-04-05 05:13:10

+0

但由於getdate()包含時間部分也..比它造成的問題(不正確的結果) – 2010-04-05 05:14:37

+0

它可能與開始日期只有我已經糾正。 – Thomas 2010-04-05 14:57:33

3

您在兩種情況下寫的,而不是casecast

+0

ohh ..謝謝.. plez告訴我是以這種方式比較日期還是比在這種情況下比較日期的好方法 – 2010-04-05 04:57:37

+0

仍然給我錯誤: 將char數據類型轉換爲日期時間數據類型導致超出範圍的日期時間值。 – 2010-04-05 04:58:28

相關問題