sql-server - where 子句中的奇怪过滤器

标签 sql-server tsql sql-server-2008

我有以下数据,但我不明白 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

我的问题是查询是否只过滤开始日期?对此行为的任何解释

最佳答案

你可以试试下面的查询,它和你的查询是一样的,但是这样写会更容易理解。

它会过滤 StartDate 和 EndDate。

DECLARE @RportDate DATE 
SET @RportDate='2018-01-04'

SELECT * FROM ##TBL
WHERE StartDate <= @RportDate 
    AND EndDate >= @RportDate

DROP TABLE ##TBL

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

关于sql-server - where 子句中的奇怪过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198086/

相关文章:

sql-server - T-SQL 如何结束 IF-ELSE IF-ELSE block

sql-server - 为什么多个 WHERE 条件会减慢查询而不是加快查询速度?

c# - 错误 "fetch out of sequence"从 C# 中的 Oracle 函数返回表,其中函数使用 dblink 到 SQL Server

sql-server - 将数据库从 SQL Server 2017 上传到 Azure SQL Server 时出错

sql-server - SQL Server 写入一次列

sql-server - 如何使用 sql server 2008 安全地销毁一些数据? (使用 DoD 安全删除或等效工具)

c# - 存储 html css javascript 的最佳数据类型

SQL Server 循环执行太耗时

sql - 将字节转换为千字节/兆字节

sql-server - Oracle 数据库表到 SQL Server 数据库表