一尘不染

DATEDIFF()或BETWEEN用于SQL查询中的日期范围

sql

最近我被告知,BETWEEN在SQL中使用该方法有些不可靠,因此我应该使用DATEDIFF()。但是,另一位程序员告诉我不是这种情况,BETWEEN只要日期格式正确,该方法就可以在所有情况下出色地工作。

请有人通过说明哪种方法更好以及为什么来解决这场辩论。

目前,我的日期范围SQL如下所示:

DATEDIFF(d,'01-Jan-1970',SIH.[Something_Date]) >= 0 AND DATEDIFF(d,'01-Jan-2013',SIH.[Something_Date]) <= 0

但是,如果可以确定它是可靠的,我宁愿这样写:

SIH.[Something_Date] BETWEEN '01-Jan-1970' AND '01-Jan-2013'

在这种情况下,我使用的是MsSQL,但是我已经标记了MySQL,因为我想知道这在这里是否也适用


阅读 243

收藏
2021-03-10

共1个答案

一尘不染

您的两个查询不相同。该datediff版本将包含所有01-Jan-2013时间的值,而介于两个版本之间的版本将仅包含时间01-Jan-2013所在的行00:00:00

如果您检查范围,并且不对该列进行任何计算,则查询将能够使用on索引,Something_Date并且同时包括来自01-Jan-2013任何时间部分的所有值。

where
  SIH.[Something_Date] >= '19700101' and
  SIH.[Something_Date] < '20130102'
2021-03-10