SQL:BETWEEN vs <=和> =

Shy*_*yju 103 sql t-sql sql-server between where

在SQL Server 2000和2005中:

  • 这两个WHERE条款有什么区别?
  • 我应该在哪些场景中使用哪一个?

查询1:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate BETWEEN '10/15/2009' AND '10/18/2009'
Run Code Online (Sandbox Code Playgroud)

查询2:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate >='10/15/2009'
  AND EventDate <='10/18/2009'
Run Code Online (Sandbox Code Playgroud)

(编辑:第二个Eventdate最初缺失,因此查询语法错误)

Ton*_*ews 108

它们是相同的:BETWEEN是问题中较长语法的简写.

使用替代更长的语法,BETWEEN如果不起作用,例如

Select EventId,EventName from EventMaster
where EventDate >= '10/15/2009' and EventDate < '10/18/2009'
Run Code Online (Sandbox Code Playgroud)

(注意<而不是<=第二种情况.)

  • 我想补充一点,我强烈建议永远不要使用BETWEEN,除非你正在处理DATE数据类型或者保证你的日期时间值永远不会有时间组件.对此保持一致将使您不太可能错误地使用BETWEEN而不是> =和<,并且在查询中获得一些您不想要的数据,或者认为您正在获得额外的一天数据当你不... (20认同)
  • 也许你应该强调第二个条件是'<'.我花了一些时间来发现差异. (19认同)
  • 基本上,为了确保阅读这篇文章的每个人都不会感到困惑,“ Between ”子句**包含两个日期**,而当您使用“ &gt;”和“ &lt;”语法时,您可以**排除任何日期范围开始和结束的两个日期**。 (3认同)
  • 当 BETWEEN 转换为条件时,会有第二个编译器步骤吗?我知道这有点迂腐,但会不会有额外的开销? (2认同)
  • 奇怪......我觉得我对这个问题,答案的写作,评论以及我的代码现在明显有bug的事实感到困惑=) (2认同)

Irf*_*rfy 34

他们是一样的.

需要注意的一件事是,如果你在DATETIME使用它,那么结束日期的匹配将是一天的开始:

<= 20/10/2009
Run Code Online (Sandbox Code Playgroud)

是不一样的:

<= 20/10/2009 23:59:59
Run Code Online (Sandbox Code Playgroud)

(它匹配<= 20/10/2009 00:00:00.000)

  • @DavidAndreiNed也会匹配'2009-10-21 00:00:00.000' - 可能不是你想要的. (4认同)
  • 您需要字段 BETWEEN '2009-10-20 00:00:00' AND '2009-10-20 23:59:59' 或字段 &gt;= '2009-10-20 00:00:00' AND field &lt;= '2009-10-20 23:59:59' 绝对肯定。 (2认同)

Cad*_*oux 13

虽然BETWEEN易于阅读和维护,但我很少推荐使用它,因为它是一个封闭的间隔,如前所述,这可能是日期的问题 - 即使没有时间组件.

例如,在处理月度数据时,通常比较日期BETWEEN first AND last,但实际上这通常更容易编写dt >= first AND dt < next-first(这也解决了时间部分问题) - 因为确定last通常比确定next-first(通过减去一天)更长一步.

另外,另一个问题是需要以正确的顺序(即BETWEEN low AND high)指定下限和上限.