如何设置日期时间的一部分

时间:2012-09-12 13:15:49

标签: sql sql-server datetime

我需要将日期时间的小时设置为某个值。我知道我可以将差异添加到所需的值,或者使用原始部分创建一个新的日期时间,但是不是更清洁的方式吗?类似的东西:

declare @d datetime = '09/08/2012 09:14:55'

set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23)

非常感谢。

1 个答案:

答案 0 :(得分:6)

DECLARE @TargetHour TINYINT = 23;

DECLARE @d datetime = '09/08/2012 09:14:55';
SET @d = DATEADD(HOUR, @TargetHour - DATEPART(HOUR, @d), @d);
SELECT @d;

结果:

2012-09-08 23:14:55.000

(是的,如果@TargetHour less 比当前小时(例如5或7),这将有效。)

尽管使用模糊和容易出错的格式(如m / d / y),我会非常小心。举个例子:我甚至不知道你的意思是9月8日或8月9日,而SQL Server也不会知道 - 它需要使用区域设置等来弄明白,如果你给你的代码有不同设置的人,会产生错误,或者更糟糕的是,会默默地接受错误的日期。你应该使用:

DECLARE @d datetime = '2012-09-08T09:14:55';