SQL Server中最有效的方法是从日期+时间获取日期?在MS SQL 2000和2005中,给定日期时间,例如'2008-09-25 12:34:56',获得仅包含'2008-09-25'的日期时间的最有效方法是什么?
3 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
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日)来规避此错误。
紫衣仙女
TA贡献1839条经验 获得超15个赞
select cast(floor(cast(@datetime as float)) as datetime)
之所以有效,因为将日期时间转换为浮点数会给出自1900年1月1日以来的天数(包括一天的分数)。地板会删除小数天并留下整天的天数,然后可以将其转换回日期时间。
- 3 回答
- 0 关注
- 781 浏览
添加回答
举报
0/150
提交
取消