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

时间:2013-01-04 08:48:58

标签: mysql sql sql-server datediff

我最近被告知在SQL中使用BETWEEN方法有点不可靠,因此我应该使用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,因为我想知道这是否适用于此

1 个答案:

答案 0 :(得分:5)

您的两个查询不相同。 datediff版本将包含来自01-Jan-2013的所有值,而不论时间,而版本之间仅包含时间为01-Jan-2013的{​​{1}}上的行。

如果您检查范围并且未对列进行任何计算,则您的查询将能够使用00:00:00上的索引,同时包含来自Something_Date的所有值时间部分。

01-Jan-2013