2011-10-07 135 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,我现在要测试了,我会很快回复。 –