挑战:
处理大型 SQL Server 数据集通常需要有效地从日期时间字段中删除时间部分。 经常使用两种常见技术:
DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
CAST(CONVERT(CHAR(11), getdate(), 113) AS DATETIME)
最佳方法:
性能基准始终显示DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
是最有效的方法。 这种方法:
现代 SQL Server 版本(2008 及更高版本)提供了更好的替代方案:
CAST(getdate() AS DATE)
直接将日期时间转换为日期数据类型,无需删除时间组件。datetime2
字段,DATEADD
方法仍然适用,但需要调整纪元值:<code class="language-sql">DECLARE @datetime2value datetime2 = '02180912 11:45'; -- Year 0218 within datetime2 DECLARE @datetime2epoch datetime2 = '19000101'; SELECT DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch);</code>
主要考虑因素:
WHERE
子句中使用这些函数会对索引利用率产生负面影响。 需要仔细考虑。CAST(CHAR())
方法对字符转换的依赖引入了与语言设置和日期格式相关的潜在漏洞。FLOAT
来存储日期,这对于大型数据集可能不是最佳选择。以上是如何有效地从 SQL Server 中的日期时间字段中删除时间部分?的详细内容。更多信息请关注PHP中文网其他相关文章!