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)
我很确定这是因为你的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)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |