SQL Server 2012查询返回不同的日期

Kci*_*ird 1 sql sql-server sql-server-2012

我想选择特定日期的特定时间表,即10-04-2018,但它返回值10-03-2018.

SELECT *
FROM tbl_schedule
WHERE [Date] = '10-04-2018'
    AND [StartTime] BETWEEN '8:01'
        AND '9:59'
    OR [EndTime] BETWEEN '8:01'
        AND '9:59';
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Rad*_*hiu 6

我很确定这是因为你的OR条款.

OR [EndTime] BETWEEN '8:01'
        AND '9:59';
Run Code Online (Sandbox Code Playgroud)

如果添加一些括号,可能更容易理解查询的工作原理:

SELECT *
FROM tbl_schedule
WHERE ( [Date] = '10-04-2018'
        AND [StartTime] BETWEEN '8:01'
        AND '9:59' )
    OR 
    ( [EndTime] BETWEEN '8:01'
        AND '9:59' ) ;
Run Code Online (Sandbox Code Playgroud)

默认情况下会发生这种情况,因为设置了运算符优先级.您可以在此处找到有关它的更多信息.

但是,简而言之,AND具有比OR更高的运算符优先级,这就是为什么它将首先被评估,将前两个条件组合在一起[Date] = & [StartTime] BETWEEN,然后OR将应用于此结果与[EndTime] BETWEEN条件的结合.

我建议在使用OR时使用括号,我认为您正在寻找的查询是:

SELECT *
FROM tbl_schedule
WHERE [Date] = '10-04-2018'
      AND 
      (  [StartTime] BETWEEN '8:01' AND '9:59' 
      OR [EndTime] BETWEEN '8:01' AND '9:59' ) ;
Run Code Online (Sandbox Code Playgroud)