我想获取给定日期/ 1天间隔的记录数据。
这意味着当天从00:00:00
到23:59:59
。日期值来自连接语句中的另一个表...即,它不是参数。
假设我的Transactions
表格带有DateOccured
(Datetime
)字段
根据我的研究,我有两种可能的选择(其中包括)。
计算当天的日期时间范围值
来自00:00:00
DateAdd(dd,DateDiff(dd,0,Transaction.DateOccured,0)
至23:59:59
DateAdd(dd,1,DateAdd(ss,-1,CONVERT(DATE,Transaction.DateOccured))) - 第二天午夜前1秒
(执行此操作的几个选项,例如将其放在SELECT
列表中或将其放在WHERE
子句中)
Datetime
转换为日期,然后附加相应的字符串(针对时间部分)以创建范围(似乎效率不高)哪种策略最好?
我会将此计算放在SELECT
列表中并用作WHERE
中的字段吗?或者在WHERE
条款
答案 0 :(得分:9)
最简单的方法是:
on cast(t.dateoccurred as date) = t2.otherdate
这可以在第一张表上使用索引(参见Martin Smith的评论)。它绝对可以利用第二个表上的索引。
以下版本也可以在第一个表上使用索引,但不能在第二个表上使用索引:
on t.dateocurred >= t2.otherdate and
t.dateoccurred < dateadd(day, 1, t2.otherdate)