0

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

这是我的SELECT声明

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

但是,它显示了这个错误

类型 date 不是定义的系统类型。
类型时间不是定义的系统类型

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

我从这里参考上述查询

提前致谢 !!

更新

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

我的表的示例数据,这将有助于您理解场景。

从上面的示例数据中,我希望用户只能在7/27/2012from4:05:00 PM到上查看与该行相关的信息4:20:00 PM。我希望,每个人都理解我的情况。

4

5 回答 5

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

于 2012-07-27T10:36:14.793 回答
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)" 
于 2012-07-27T10:44:23.713 回答
0

用这个

Select * from PAPER_DETAILS
where ExamDate >= DATEADD(MINUTE, -15, getdate()) and ExamDate <= getdate()
于 2012-07-27T10:33:59.717 回答
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))    ))"

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

于 2012-07-27T16:38:03.580 回答
0

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

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

SELECT *
  FROM PAPER_DETAILS
 WHERE ExamDate  = GETDATE()
   AND StartTime = DATEADD(MINUTE,-15,GETDATE())
于 2012-07-27T10:29:14.150 回答