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

jes*_*sta 2 sql sql-server datetime

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

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

set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23)
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Aar*_*and 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;
Run Code Online (Sandbox Code Playgroud)

结果:

2012-09-08 23:14:55.000
Run Code Online (Sandbox Code Playgroud)

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

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

DECLARE @d datetime = '2012-09-08T09:14:55';
Run Code Online (Sandbox Code Playgroud)