首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在SQL server中设置日期的最低值

在SQL server中设置日期的最低值
EN

Stack Overflow用户
提问于 2008-09-17 17:01:25
回答 8查看 74.1K关注 0票数 75

在SQL Server中,如何将日期时间设置为秒/分钟/小时/日/年?

假设我有一个日期为2008-09-17 12:56:53.430,那么地板的输出应该是:

2008-01-01 00:00:00.000

  • Month: 2008-09-01 00:00:00.000

  • Day: 2008-09-17 00:00:00.000

  • Hour: 2008-09-17 12:00:00.000

  • Minute: 2008-09-17 12:56:00.000

  • Second: 2008-09-17 12:56:53.000

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-17 17:01:37

关键是使用DATEADDDATEDIFF以及适当的SQL timespan枚举。

代码语言:javascript
复制
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,则通常会出现算术溢出。因此,请选择一个已知的值,确保该值将低于您试图填充的datetime。

票数 109
EN

Stack Overflow用户

发布于 2008-09-17 19:08:32

在SQL Server中,有一个小技巧可以做到这一点:

代码语言:javascript
复制
SELECT CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS DATETIME)

将DateTime转换为浮点数,浮点数将日期表示为整数部分,将时间表示为经过的一天的小数部分。去掉小数部分,然后把它转换成DateTime,你就得到了当天开始的午夜。

这可能比所有的DATEADD和DATEDIFF更有效。这当然更容易打字。

票数 30
EN

Stack Overflow用户

发布于 2012-04-18 23:20:00

在转换/转换解决方案的基础上扩展,在Microsoft SQL Server 2008中,您可以执行以下操作:

代码语言:javascript
复制
cast(cast(getdate() as date) as datetime)

只需将getdate()替换为任何datetime列即可。

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

这对于即席查询或更新是可以的,但是对于键连接或频繁使用的处理,在处理过程中处理转换或重新定义表以具有适当的键和数据可能更好。

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

我也不认为它使用字符串转换,但我不能比较实际效率和纸上谈兵的估计。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/85373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档