为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2019-08-12 16:31:18
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日)来规避此错误。


查看完整回答
反对 回复 2019-08-12
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

select cast(floor(cast(@datetime as float)) as datetime)

之所以有效,因为将日期时间转换为浮点数会给出自1900年1月1日以来的天数(包括一天的分数)。地板会删除小数天并留下整天的天数,然后可以将其转换回日期时间。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 781 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信