4

次のようなテーブル(たとえばtableA)があります。

| | 名前 | 開始日 | 終了日 |
|--------------------------------|
| | | | 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 |

と の間でアクティブなテーブルから名前を取得したい。上記の表から、結果はa,c および e になります。2012-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'

BETWEEN は、test_expression の値が begin_expression の値以上で end_expression の値以下の場合に TRUE を返します。

NOT BETWEEN は、test_expression の値が begin_expression の値より小さいか end_expression の値より大きい場合に 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 に答える