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

在SQL Server中设置日期

在SQL Server中设置日期

PIPIONE 2019-09-20 16:55:45
在SQL Server中,如何将DATETIME“置于”第二/分钟/小时/日/年?假设我的日期是2008-09-17 12:56:53.430,那么地板的输出应该是:年:2008-01-01 00:00:00.000月:2008-09-01 00:00:00.000日:2008-09-17 00:00:00.000时间:2008-09-17 12:00:00.000会议纪要:2008-09-17 12:56:00.000第二名:2008-09-17 12:56:53.000
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

关键是使用DATEADD和DATEDIFF以及适当的SQL时间间隔枚举。


declare @datetime datetime;

set @datetime = getdate();

select @datetime;

select dateadd(year,datediff(year,0,@datetime),0);

select dateadd(month,datediff(month,0,@datetime),0);

select dateadd(day,datediff(day,0,@datetime),0);

select dateadd(hour,datediff(hour,0,@datetime),0);

select dateadd(minute,datediff(minute,0,@datetime),0);

select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01');

select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday

select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday

请注意,当您按秒进行平铺时,如果使用0,则通常会出现算术溢出。因此,请选择一个保证低于您尝试放置的日期时间的已知值。


查看完整回答
反对 回复 2019-09-20
?
长风秋雁

TA贡献1757条经验 获得超7个赞

扩展Convert / Cast解决方案,在Microsoft SQL Server 2008中,您可以执行以下操作:


cast(cast(getdate() as date) as datetime)

只需替换getdate()为日期时间的任何列。


此转换不涉及任何字符串。


这对于即席查询或更新是可以的,但对于密钥连接或大量使用的处理,最好在处理中处理转换或重新定义表以具有适当的密钥和数据。


在2005年,你可以使用凌乱的地板: cast(floor(cast(getdate() as float)) as datetime)


我不认为这也使用字符串转换,但我不能说比较实际效率与扶手椅估计。


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

添加回答

举报

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