我在asp.net中使用calendarextender控件。它只显示日期,而不是时间。但是在插入数据库时,会自动插入时间。但是在使用日期条件从数据库中检索数据时,不会显示相应的记录。我可以对storedprocedure进行哪些修改来解决此问题。
答案 0 :(得分:1)
您最有可能遇到的问题是,如果您正在寻找等于3/11/2009的日期,由于时间戳,您可能永远找不到它。您可以使用一些方法来更改标记过程,即考虑日期的范围:
使用Between语句将为您提供包容性范围
Select myname,mydate from sometable
where mydate between 3/10/2009 and 3/11/2009
或
使用>和<给你一个专属范围
Select myname,mydate from sometable
where mydate >3/10/2009 and mydate < 3/12/2009
或
利用DateAdd功能去除该字段的时间。 SQLTeam Blog
有一些很好的例子dateadd(dd,0, datediff(dd,0,myDate))
或者 如果您可以更改表本身并且您正在使用SQL Server 2008,则可以使用新的SQL Server 2008 日期 DataType,这是一个没有时间组件处理的日期。在MSDN博客上有关于新Date and Time enhancements in SQL Server 2008的好博客。
不要忘记你也可以查看插入程序(如果适用)并将时间归零。
此外,在处理日期时间时,请确保考虑&gt; =和&lt; = ,以免错过任何记录。
希望这能为您提供足够的选择来解决您的问题。
答案 1 :(得分:0)
在数据库中,datetime数据类型包括日期和时间,无论何时只提供日期或日期时间。如果您将日期插入为'1/1/2011',那么它将被解释为 1/1/2011 00:00:00 AM
在选择查询中失败,因为它试图比较日期和时间(例如在相同日期之间,即。'在2011年1月1日和2011年1月1日之间'
使用日/月/年组件类似子句或使用&lt;,&gt;操作者 即
select thisone from sometable where day(tabledate) between day(wheredate1) and day(wheredate2)
and month(tabledate) between month(wheredate1) and year(wheredate2)
and year(tabledate) between year(wheredate1) and year(wheredate2)
或
select thisone from sometable where tabledate>=wheredate1 and tabledate<=wheredate1
运营商=适用于您使用包容性或排他性搜索的情况