SQL Server:有效地從日期時間資料中刪除時間
在 SQL Server 中使用 datetime
欄位通常需要隔離日期元件,丟棄時間。 本文比較了兩種常見技術:DATEADD
/DATEDIFF
和投射到 char
,分析其性能特徵。
方法比較
DATEADD
/DATEDIFF
方法:
<code class="language-sql">a) SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)</code>
這巧妙地使用 DATEDIFF
計算與紀元 (1900-01-01) 的天數差異,然後使用 DATEADD
重建不帶時間分量的日期。
或者,投射到 char
:
<code class="language-sql">b) SELECT CAST(CONVERT(CHAR(11), GETDATE(), 113) AS DATETIME)</code>
這會將 datetime
轉換為字串(僅顯示日期),然後再轉換回 datetime
。
效能分析
測試顯示方法 (a) – DATEADD
/DATEDIFF
– 通常消耗較少的 CPU 資源,尤其是大型資料集。 但是,它很容易受到與語言和日期格式不一致相關的潛在問題的影響。
方法 (b) – 轉換 – 由於中間的 char
轉換,可能會傳輸稍多的數據,但這種開銷通常比 (a) 的潛在效能提升影響較小。
進一步考慮
從 SQL Server 2008 開始,可以使用更直接的方法:直接轉換為 DATE
資料類型。
推薦
兩種方法都達到了預期的結果,但最佳選擇取決於您的應用程式的上下文。 為了獲得卓越的效能,尤其是對於大型資料集,DATEADD
/DATEDIFF
(方法 a)通常是首選。 如果對 datetime
列建立索引至關重要,請考慮轉換為 DATE
或確保時間部分不會影響索引的使用。
以上是如何有效率地從 SQL Server 中的日期時間欄位中刪除時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!