【问题标题】:DateTime in Calendar Extender日历扩展器中的日期时间
【发布时间】:2009-03-11 09:20:47
【问题描述】:

我在asp.net中使用calendarextender控件。它只显示日期,不显示时间。但是在插入数据库时​​,时间会自动插入。但是在使用条件从数据库中检索数据时,没有相应的记录显示。我可以对存储过程进行哪些修改来解决这个问题。

【问题讨论】:

  • 您能否在 where 子句中提供日期查询的存储过程中的代码片段?
  • 您能否提供有关您正在使用的数据库版本的详细信息

标签: asp.net sql vb.net


【解决方案1】:

您最有可能遇到的问题是,如果您正在寻找一个等于 2009 年 3 月 11 日的日期,您可能永远找不到它,因为有时间戳。您可以用来更改存储过程的几种方法是考虑日期的范围:

使用 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 Date DataType,这是一个无需处理时间组件的日期。 MSDN 博客上有一篇关于新 Date and Time enhancements in SQL Server 2008 的好博客。

别忘了您也可以查看插入过程(如果适用)并将时间归零。

此外,在处理日期时间时,请务必考虑 >= 和 ,以免错过任何记录。

希望这为您提供了足够的选择来解决您的问题。

【讨论】:

    【解决方案2】:

    在数据库中的日期时间数据类型包括日期和时间,无论您是否只提供日期或日期时间。如果您将日期插入为 '1/1/2011' 那么它将被解释为 2011 年 1 月 1 日上午 00:00:00

    在选择查询中失败,因为它尝试比较日期和时间(例如在相同日期之间,即“在 2011 年 1 月 1 日和 2011 年 1 月 1 日之间”

    使用像子句这样的日/月/年组件或使用 运算符 即

    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
    

    运算符 = 适用于您使用包含性或排他性搜索的情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      相关资源
      最近更新 更多