4

我有一个像这样的表(例如tableA):

| 姓名 | 开始日期 | 结束日期 |
|----------------------------------|
| 一个 | 2012-07-01 | 2013-06-30 |
| 乙 | 2011-05-01 | 2012-04-30 |
| c | 2010-01-01 | 2013-12-31 |
| d | 2013-01-01 | 2014-12-31 |
| 电子| 2011-07-01 | 2012-06-30 |

我想从表中获取一个在和之间活跃的名字。从上表结果应该是a,c 和 e2012-05-012012-10-31

我所做的如下:

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

但我没有得到正确的结果。

4

3 回答 3

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
于 2012-07-12T06:19:50.787 回答
0

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

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

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

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

于 2012-07-12T06:12:18.040 回答
0

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

SELECT Name FROM tableA WHERE startdate>='2012-05-01' AND enddate<='2012-10-31'
于 2012-07-12T06:14:22.453 回答