如何在sql server中编写搜索查询

时间:2014-07-31 10:19:48

标签: sql sql-server

我的事件表,包含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搜索日期的活动事件。请对此进行排序。

3 个答案:

答案 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)