根据日期范围查找记录

根据日期范围查找记录

问题描述:

我对SQL很陌生。基本上,我有一个名为“日期”一栏的数据库,我想返回所有的条目,从而“日期”是startDateendDate之间根据日期范围查找记录

Dim myStr As String = String.Format("Select * from {0} where [Date] between @date1 and @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("dd/MM/yyyy")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("dd/MM/yyyy")) 

其中frm是一个Windows窗体日期时间选择器。

不知道我错了,但查询不返回任何东西。

+3

你应该被路过的日期查询和调用'ToString'。不要将二进制Date值转换为String。如果你真正想做的是零时间,那么这就是你所做的,即使用'frm.StartDate.Value.Date'。 – jmcilhinney

Dim myStr As String = String.Format("SELECT * FROM {0} WHERE [Date] >= @date1 AND < @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.Add("@date1" SqlDbType.DateTime).Value = frm.StartDate.Value.Date 
ad.SelectCommand.Parameters.Add("@date2", SqlDbType.DateTime).Value = frm.EndDate.Value.Date.AddDays(1) 

如果设置'dd/MM/yyyy',SQL将返回错误'将varchar数据类型转换为DateTime数据类型导致超出范围的值。我认为你应该设置格式如下。

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("yyyy/MM/dd")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("yyyy/MM/dd")) 
+1

如果您使用字符串为查询设置日期值,您仍然在做错。 –

+0

@JoelCoehoorn:为什么不能使用字符串来设置日期值,我的朋友?例如:从Person.Person 中选择排名前10位的FirstName,ModifiedDate ,其中ModifiedDate位于'2009/01/10'和'2009/01/20' – Tomato32

+0

之间几个原因。一个是服务器实际上可能有你期望的不同日期格式。除非您在德国获得客户,或者某人选择了Azure实例的错误区域,否则这些都是有趣和有趣的游戏。另一个原因是[性能](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)。 –