我试图根据当前日期和当前时间前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/2012
从4:05:00 PM
到4:20:00 PM
查看该行的相关信息。我希望,每个人都了解我的情景。
答案 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)) ))"
并且,通过一些示例数据验证,它工作正常。!!!