相关疑难解决方法(0)

我应该使用强制转换或范围将日期时间加入日期吗?

这个问题是从这里提出的优秀问题中提取出来的:

迄今为止的演员阵容是可以讨论的,但这是一个好主意吗?

就我而言,我不关心该WHERE子句,而是关心加入具有类型列的事件表DATE

一个表有DATETIME2,另一个有DATE......所以我可以有效地JOIN使用aCAST( AS DATE)或者我可以使用“传统”范围查询(>=日期和<日期+1)。

我的问题是哪个更可取?这些DATETIME几乎永远不会与谓词DATE值匹配。

我希望保持在 200 万行DATETIME和 5000行以下DATE(如果这个考虑有所不同)

我是否应该期望在JOIN使用该WHERE子句时具有相同的行为?我应该更喜欢哪个通过缩放来保持性能?答案是否随 MSSQL 2012 而改变?

我的通用用例是将我的事件表视为日历表

SELECT
    events.columns
    ,SOME_AGGREGATIONS(tasks.column)
FROM
    events
LEFT OUTER JOIN
    tasks
        --This appropriately states my intent clearer
        ON CAST(tasks.datetimecolumn AS DATE) = events.datecolumn 
        --But is this more effective/scalable?
        --ON tasks.datetimecolumn >= events.datecolumn 
        --AND tasks.datetimecolumn < DATEADD(day,1,events.datecolumn)
GROUP BY
    events.columns
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008-r2 sql-server-2012 datetime

3
推荐指数
1
解决办法
3万
查看次数