我的事件表,包含starteventdate和endevent date。
Id EventName starteventdate endevent
---------------------------------------
1 a 7/6/2014 8/6/2014
2 b 9/6/2014 10/6/2014
3 c 10/6/2014 15/6/2014
我的搜索屏幕已经过时了。所以我想在这些事件处于活动状态的两个日期之间搜索事件。
我正在搜索7/6 / 2014- 10/6/2014结果之间的事件 - > 1,2,3。
如果我在10/6 / 2014-12 / 6/2014结果之间搜索事件 - > 2,3。
如果我在8/6 / 2013-20 / 6/2014结果之间搜索事件 - > 1,2,3
我尝试了这个查询。但我能够只搜索一个日期,如
SELECT e.EventsID,e.EventDesc AS 'Event Description'
FROM dEvents e
WHERE convert(datetime,convert(varchar(10),StartEvent,101),101)
BETWEEN
convert(datetime,convert(varchar(10),@FromDate,101),101)
AND
convert(datetime,convert(varchar(10),@ToDate,101),101).
所以我只想要b / w搜索日期的活动事件。请对此进行排序。
答案 0 :(得分:2)
我会做这样的事情,假设你有DATETIME
种类型,而不是字符串。如果需要,您应该能够将CONVERT
重新放入。
SELECT e.EventsID, e.EventDesc AS 'Event Description'
FROM dEvents e
WHERE EndEvent >= @FromDate
AND StartEvent <= @ToDate
答案 1 :(得分:1)
请试试这个。观察,你存储dd / mm / yyyy所以使用103进行转换
示例数据:
IF OBJECT_ID(N'dEvents')>0
BEGIN
DROP TABLE dEvents
END
CREATE TABLE dEvents (Id INT,EventName VARCHAR(10),StartEvent VARCHAR(20),endevent VARCHAR(20))
INSERT INTO dEvents VALUES
('1','a','7/6/2014','8/6/2014'),
('2','b','9/6/2014','10/6/2014'),
('3','c','10/6/2014','15/6/2014')
<强>查询:强>
DECLARE @FromDate VARCHAR(20) = '7/6/2014'
DECLARE @ToDate VARCHAR(20) = '10/6/2014'
SELECT e.ID,e.EventName AS 'Event Description'
FROM dEvents e
WHERE CONVERT(DATE,StartEvent,103) BETWEEN CONVERT(DATE,@FromDate,103) AND CONVERT(DATE,@ToDate,103)
OR CONVERT(DATE,endevent,103) BETWEEN CONVERT(DATE,@FromDate,103) AND CONVERT(DATE,@ToDate,103)
<强>清理:强>
IF OBJECT_ID(N'dEvents')>0
BEGIN
DROP TABLE dEvents
END
答案 2 :(得分:0)
不确定我理解这个问题。
所以你有两个参数:@FromDate和@ToDate。并且您希望返回 dEvents 表中的所有行,其中事件在这两个参数日期之间的时间内处于活动状态?
你似乎在那里进行了大量的转换,但是你没有处理日期或日期时间数据类型吗?
然后试试这个:
SELECT DISTINCT e.EventsID,e.EventDesc AS 'Event Description'
from dEvents e
WHERE @FromDate BETWEEN starteventdate AND endevent
OR @ToDate BETWEEN starteventdate AND endevent
OR (@FromDate < starteventdate AND @ToDate > endevent)