猿问

SQL Server中最有效的方法是从日期+时间获取日期?

SQL Server中最有效的方法是从日期+时间获取日期?

在MS SQL 2000和2005中,给定日期时间,例如'2008-09-25 12:34:56',获得仅包含'2008-09-25'的日期时间的最有效方法是什么?


弑天下
浏览 784回答 3
3回答

一只萌萌小番薯

Select DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)DateDiff(Day,0,GetDate())与DateDiff(Day,'1900-01-01',GetDate())相同由于DateDiff返回一个整数,您将获得自1900年1月1日以来经过的天数。然后将该整数天添加到1900年1月1日。净效果是删除时间组件。我还应该提一下,这种方法适用于任何日期/时间部分(如年,季,月,日,小时,分钟和秒)。Select  DateAdd(Year, DateDiff(Year, 0, GetDate()), 0)Select  DateAdd(Quarter, DateDiff(Quarter, 0, GetDate()), 0)Select  DateAdd(Month, DateDiff(Month, 0, GetDate()), 0)Select  DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)Select  DateAdd(Hour, DateDiff(Hour, 0, GetDate()), 0)Select  DateAdd(Second, DateDiff(Second, '20000101', GetDate()), '20000101')最后一秒,需要特殊处理。如果您使用1900年1月1日,您将收到错误。两个日期时间列的差异导致运行时溢出。您可以使用不同的参考日期(如2000年1月1日)来规避此错误。

紫衣仙女

select cast(floor(cast(@datetime as float)) as datetime)之所以有效,因为将日期时间转换为浮点数会给出自1900年1月1日以来的天数(包括一天的分数)。地板会删除小数天并留下整天的天数,然后可以将其转换回日期时间。
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答