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

时间:2012-07-27 10:23:06

标签: asp.net sql sql-server datetime

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

这是我的SELECT声明

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

但是,它显示此错误

  

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

我正在使用VB使用SQL Server 2005和ASP.NET。

我从here

引用上述查询

提前致谢!!

已更新

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

我的表格的示例数据,可以帮助您了解情景。

从上面的示例数据中,我希望用户只能在7/27/20124:05:00 PM4:20:00 PM查看该行的相关信息。我希望,每个人都了解我的情景。

5 个答案:

答案 0 :(得分:1)

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小时和分钟,并使用它们来构建检查时间的限制。我无法测试它,所以请告诉我它是否有效。

答案 1 :(得分:0)

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

编辑:带走“CONVERT(DATE ..”,因为你真的不需要它并再次测试

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

答案 2 :(得分:0)

使用此

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

答案 3 :(得分:0)

如果您想比较不同的日期和时间-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)" 

答案 4 :(得分:0)

这是什么,我终于得到了

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))    ))"

并且,通过一些示例数据验证,它工作正常。!!!