对于startdate和enddate的SQL查询混淆

时间:2012-07-12 06:10:29

标签: sql sql-server select select-query

我有一张表(例如 tableA ),如下所示:

| Name  | Startdate  |  Enddate   |
|---------------------------------|
|  a    | 2012-07-01 | 2013-06-30 |
|  b    | 2011-05-01 | 2012-04-30 |
|  c    | 2010-01-01 | 2013-12-31 |
|  d    | 2013-01-01 | 2014-12-31 |
|  e    | 2011-07-01 | 2012-06-30 |

我想从2012-05-012012-10-31之间活跃的表格中获取名称。从上表中,结果应为 a,c和e

我所做的如下:

SELECT Name FROM tableA WHERE startdate<='2012-05-01' AND enddate>='2012-10-31'

但我得不到正确的结果。

3 个答案:

答案 0 :(得分:5)

declare @T table
(
  Name char(1),
  Startdate datetime,
  Enddate datetime
)

insert into @T values
('a',     '20120701',  '20130630'), 
('b',     '20110501',  '20120430'), 
('c',     '20100101',  '20131231'), 
('d',     '20130101',  '20141231'), 
('e',     '20110701',  '20120630')

declare @StartDate datetime = '20120501'
declare @EndDate datetime = '20121031'

select Name
from @T 
where Startdate < @EndDate and
      Enddate > @StartDate

答案 1 :(得分:1)

比较运算符的位置正在创建问题检查

SELECT Name FROM tableA WHERE startdate>='2012-05-01' AND enddate<='2012-10-31'

答案 2 :(得分:0)

如果您想要查找在此期间发生的任何结果,请使用BETWEEN

SELECT Name FROM tableA WHERE startdate BETWEEN '2012-05-01' and '2012-10-31'
  

如果test_expression的值大于,则BETWEEN返回TRUE   或者等于begin_expression的值并且小于或等于   end_expression的值。

     

如果test_expression的值小于,则 NOT BETWEEN返回TRUE   begin_expression的值或大于的值   end_expression具有