如何删除日期时间值的时间部分(SQL Server)?

这是我使用的:


SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)

我认为可能会有更好,更优雅的方式。


要求:


它必须尽可能快(转换越少越好)。

最终结果必须是datetime类型,而不是字符串。


九州编程
浏览 924回答 3
3回答

绝地无双

Itzik Ben-Gan在DATETIME Calculations,第1部分(SQL Server Magazine,2007年2月)中介绍了执行这种转换的三种方法(最慢到最快;第二种和第三种方法之间的差异很小):SELECT CAST(CONVERT(char(8), GETDATE(), 112) AS datetime)SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)SELECT CAST(CAST(GETDATE() - 0.50000004 AS int) AS datetime)读者在杂志的四月号中提出了您的技巧(铸造成浮动)。据他介绍,它的性能可与上述第二种技术媲美。

慕标琳琳

你CAST- FLOOR- CAST似乎已经是最佳的方式,至少在MS SQL Server 2005中。我见过的其他一些解决方案具有字符串转换功能,例如Select Convert(varchar(11), getdate(),101),它们的速度要慢10倍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server