我有一个日历控件的starttime和endtime事件记录。
我希望在特定日期完成事件,比如2009年2月28日
但db表的日期数据格式为2/28/2009 10:00:00,2 / 28/2009 12:00:00。
我在VS 2005 IDE中创建的sproc中尝试了此查询,但它无法正常工作
ALTER PROCEDURE dbo.spSelectBenchEvent
(
@EVENT_DATE DATE // BTW, THIS RETURNS ERROR :CANNOT FIND DATE DATATYPE.
//@EVENT_DATE HAS INVALID DATATYPE
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
FROM tbl_benchbook
WHERE START_TIME=EVENT_DATE
ORDER BY START_TIME
提前致谢。
答案 0 :(得分:2)
如果您希望评估2009年3月29日的所有活动,请使用以下cluase。
SELECT *
FROM tableName
WHERE Date >= '2009/03/29' AND Date < '2009/03/30'
此处要点的关键是,为了捕获在给定日期发生的所有记录,您需要定义包含该日所有时间值的日期范围。
有意义吗?
干杯,约翰
答案 1 :(得分:2)
有很多与此相关的问题,请查看:
并提供最佳性能解决方案检查:MS SQL Date Only Without Time
基本上您的代码可能如下所示:
select
id, eid, benchid, paccode, start_time, end_time
from
tbl_benchbook
where start_time >= dateadd(dd, datediff(dd, 0, @event_date), 0)
and start_time < dateadd(dd, datediff(dd, 0, @event_date)+1, 0)
答案 2 :(得分:2)
根据您更新的问题,这应该有效:
SELECT ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
FROM tbl_benchbook
WHERE START_TIME >= @EVENT_DATE
AND START_TIME < DATEADD(day,1,@EVENT_DATE)
ORDER BY START_TIME
答案 3 :(得分:-1)
--1. you need to make sure there is no time on the parameter
--2. you can just use "+1" on the datetime, to get the next day
enter ALTER PROCEDURE dbo.spSelectBenchEvent
(
@EVENT_DATE DATETIME
)
AS
BEGIN TRAN
SET NOCOUNT ON;
--remove any time from given date
SET @EVENT_DATE=CONVERT(char(10),@EVENT_DATE,111)
SELECT ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
FROM tbl_benchbook
WHERE START_TIME>=@EVENT_DATE AND START_TIME<@EVENT_DATE+1
ORDER BY START_TIME
code here