代码之家  ›  专栏  ›  技术社区  ›  JonWay

WHERE子句中的奇怪筛选

  •  3
  • JonWay  · 技术社区  · 6 年前

    我有以下数据,我不理解WHERE子句是如何工作的

    CREATE TABLE ##TBL (ID  INT, StartDate DATE,    EndDate DATE)
     INSERT INTO ##TBL VALUES
     (1,'2018-01-01','2018-02-07'), (2,'2018-01-02','2018-09-17'),
     (3,'2018-01-03','2018-07-12'), (4,'2018-01-04','2018-07-03'),
     (5,'2018-01-05','2018-05-31'), (6,'2018-01-06','2018-07-28'),
     (7,'2018-01-07','2018-03-08'), (8,'2018-01-08','2018-08-05'),
     (9,'2018-01-09','2018-09-20'), (10,'2018-01-10','2018-08-14'),
     (11,'2018-01-11','2018-03-30'), (12,'2018-01-12','2018-03-02'),
     (13,'2018-01-13','2018-05-15'), (14,'2018-01-14','2018-03-14'),
     (15,'2018-01-15','2018-08-22'), (16,'2018-01-16','2018-04-09'),
     (17,'2018-01-17','2018-06-03'), (18,'2018-01-18','2018-09-30'),
     (19,'2018-01-19','2018-04-03'), (20,'2018-01-20','2018-02-14');
    

    当我根据日期参数使用下面的代码执行查询时,我不理解结果。

    DECLARE @RportDate DATE 
          SET @RportDate='2018-01-04'
     SELECT* FROM ##TBL
     WHERE @RportDate BETWEEN StartDate AND EndDate
     DROP TABLE ##TBL
    

    例如,如果我使用日期“2018-01-04”作为参数 我有这个结果

    ID  StartDate   EndDate
    1   2018-01-01  2018-02-07
    2   2018-01-02  2018-09-17
    3   2018-01-03  2018-07-12
    4   2018-01-04  2018-07-03
    

    如果我把日期改为“2018-01-02” 输出将是

    ID  StartDate   EndDate
    1   2018-01-01  2018-02-07
    2   2018-01-02  2018-09-17
    

    我的问题是查询是否只筛选开始日期?对这种行为有什么解释吗

    1 回复  |  直到 6 年前
        1
  •  2
  •   Pawel Czapski    6 年前

    您可以尝试下面的查询,它与您的查询相同,但是这样写会更容易理解。

    它过滤开始日期和结束日期。

    DECLARE @RportDate DATE 
    SET @RportDate='2018-01-04'
    
    SELECT * FROM ##TBL
    WHERE StartDate <= @RportDate 
        AND EndDate >= @RportDate
    
    DROP TABLE ##TBL
    

    你可以找到现场演示 Live Demo Here