2011-10-07 131 views
1

我們想比較db的日期和當前日期。如何比較兩個日期?

這裏是我到目前爲止已經試過:

'Obtain current date 

Dim curdate As String = Now.ToString("yyyy") 

'Now compare curdate with date from db called eventdate. Event date is of dateTime datatype. 

If drv("eventdate").ToString = "" And Year(drv("eventdate").ToString) = curdate Then 

'Then do some processing 
End if 

當我運行這段代碼,我得到以下錯誤:從字符串

轉換「」輸入「日期」是無效的。

請幫忙!

非常感謝專家。

回答

0

我相信你有一張空或空值,也是你comparisn是錯誤的,請嘗試:

If drv("eventdate").ToString <> "" Andalso Year(drv("eventdate").ToString) = curdate Then 

'Then do some processing 
End if 
+0

謝謝Jmoreno。非常抱歉,遲到的迴應。我沒有收到電子郵件回覆。我現在只是看到這個,因爲我已經回來了一個額外的問題。 –

+0

@ChidiOkeh,沒問題。順便說一下,DBNull.Value。ToString返回空字符串,這就是爲什麼我使用它而不是直接檢查null(不知道你的表中有什麼),通常你只想檢查null。 – jmoreno

3
If Today.CompareTo(CDate(drv("eventdate")).Date) = 0 Then 
    'Do something 
End If 

我在這裏假設你只關心一天,而不是時間。否則,在一天內進行比賽的可能性大約爲250萬。基於


的評論:

If Today.Year.CompareTo(CDate(drv("eventdate")).Year) = 0 Then 
    'Do something 
End If 

If Today.Year = CDate(drv("eventdate")).Year Then 
    'Do something 
End if 

還有一件事:聽起來真是這是一個支票,應由數據庫來完成。使其成爲返回結果的查詢的一部分。這將是更快,這是檢查所屬的地方。所有你需要的就是添加一個檢查您的where子句,像這樣:

Year(eventdate) = Year(current_timestamp) 
+0

謝謝喬爾的善意回應。我們只想要像2011年那樣的一年。我們基本上是想隱藏往年的數據。所以,在我們目前的情況下,我們不想顯示任何2010年的數據。如果活動日期爲空或活動日期='2010',則顯示一件事。 –

+0

再次感謝你Joel。我嘗試了所有的解決方案,每個人都給我這個錯誤,這與我得到的錯誤類似:從'DBNull'類型轉換爲類型'Date '是無效的,我知道數據庫中沒有數據是空的 –

+0

再次檢查如果它試圖從DBNull轉換,你的表中可能沒有任何空的值,但是它們確定存在於你的查詢結果中。容易編寫一個能夠做到這一點的查詢 –

1

如果drv有DataReader的實例然後驗證DBNull

IF Not drv.IsDBNull(column_index_of_eventdate) Then 
    ... 
    If drv.GetDateTime(column_index).Year=Date.Now.Year Then 
     ... 
    End If 
End If 
+0

謝謝AVD。關於驗證DBNull的好主意,但我沒有使用DataReader的實例,還有其他的想法,請看看我對Joel的建議解決方案的迴應。 –

+0

@ChidiOkeh什麼是數據類型爲eventDate?使用IsNothing來測試null。IF Not IsNothing(drv(「colName」))then ... – adatapost

+0

數據類型是datetime,我現在要測試了,我會很快回復。 –