在SQL Server和ASP.NET中根据当前日期和时间从数据库中检索数据



我试图根据当前日期和当前时间前15分钟从表Paper_Details中获取信息。

这是我的SELECT语句

objcmd.CommandText = "Select * from PAPER_DETAILS where ExamDate = Convert(date, getdate()) and StartTime = (Convert(time, getdate()) - 15)"

但是,它显示了这个错误

类型日期不是定义的系统类型
类型时间不是定义的系统类型

我使用的是SQLServer2005和使用VB.的ASP.NET

我参考了的上述查询

提前感谢!!

更新

StartTime           |   ExamDate   
____________________|_____________________________
1/1/1900 4:20:00 PM | 7/27/2012 12:00:00 AM

我的表的示例数据,它将帮助您理解场景。

从上面的示例数据中,我希望用户只能在4:05:00 PM4:20:00 PM7/27/2012上查看相应行的信息。我希望每个人都能理解我的想法。

objcmd.CommandText = "Select * from PAPER_DETAILS " + 
                     "where ExamDate=dateadd(dd,0, datediff(dd,0, getDate()) " + 
                     "and (getDate() >= DATEADD(n, -(DATEPART(minute, StartTime) " + 
                     "+ DATEPART(HOUR, StartTime) * 60) - 15, GETDATE())) and  " + 
                     "(GETDATE() <= DATEADD(n, (DATEPART(minute, StartTime) + " + 
                     "DATEPART(HOUR, StartTime) * 60), GETDATE()))" 

我想你的ExamDate不包含时间信息,因此你需要一个没有时间信息的当前日期来获得准确的比较
此外,由于您的字段已经是DateTime类型,因此无需将结果转换为DateTime

编辑:添加了一个非常复杂的测试,提取StartTime小时和分钟,并使用它们来构建检查时间的限制。我无法测试它,所以请告诉我它是否有效。

使用此

Select * from PAPER_DETAILS
where ExamDate >= DATEADD(MINUTE, -15, getdate()) and ExamDate <= getdate()

使用DATEADD从当前时间减去15分钟

编辑:去掉"CONVERT(DATE..",因为你真的不需要它,然后再次测试

SELECT *
  FROM PAPER_DETAILS
 WHERE ExamDate  = GETDATE()
   AND StartTime = DATEADD(MINUTE,-15,GETDATE())

如果您想比较日期和时间差-2,请尝试以下操作。

objcmd.CommandText = "Select * from PAPER_DETAILS " + 
                 "where CONVERT(varchar(20),ExamDate,101)=Convert(varchar(20),getdate(),101) " + 
                 "and CONVERT(varchar(20),StartTime,108)=CONVERT(varchar(20), dateadd(MINUTE,-15,getdate()),108)" 

这就是为什么,我终于得到了

objcmd.CommandText = "SELECT * FROM PAPER_DETAILS WHERE ((ExamDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) AND ((DATEPART(minute, GETDATE()) >= DATEPART(minute, DATEADD(MINUTE, - 15, StartTime)))  AND (DATEPART(hh, GETDATE()) = DATEPART(hh, StartTime)) AND (DATEPART(minute, GETDATE()) <= DATEPART(minute, StartTime))    ))"

并且,通过一些样本数据验证,它运行良好。!!!

最新更新