Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何设置日期时间的一部分_Sql_Sql Server_Datetime - Fatal编程技术网

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

Sql 如何设置日期时间的一部分,sql,sql-server,datetime,Sql,Sql Server,Datetime,我只需要将datetime的小时设置为某个值。我知道我可以将差异添加到所需的值中,或者使用原始日期的部分创建新的日期时间,但是没有更干净的方法吗?比如: declare @d datetime = '09/08/2012 09:14:55' set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23) 非常感谢 DECLARE @TargetHour TINYINT = 23; DECLARE @d datetime = '09/08/201

我只需要将datetime的小时设置为某个值。我知道我可以将差异添加到所需的值中,或者使用原始日期的部分创建新的日期时间,但是没有更干净的方法吗?比如:

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

set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23)
非常感谢

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小于当前小时,例如5或7,这将起作用。)

不过,对于使用模棱两可且容易出错的格式(如m/d/y),我会非常小心。举个例子:我甚至不知道你指的是9月8日还是8月9日,SQL Server也不知道-它需要使用区域设置等来解决这个问题,如果你将代码提供给具有不同设置的人,它将生成错误,或者更糟糕的是,无声地接受错误的日期。你应使用:

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

  • 没有。是的。您也许可以这样做,但在函数内部,它仍然使用您无论如何都会使用的基本SQL(DateAdd)。问题是“有没有更干净的方法?”而他的答案是“没有”,所以我想严格来说,这是一个客观的答案,即使不是最有用的(但并非毫无用处,因为我确信在某个地方会有一个函数)。@AaronBertrand-这是在回答他提出的问题“难道没有更干净的方法吗?”他在问题中已经说过:“我知道我可以将其添加到所需值的差异中,或者使用原始日期时间的部分创建一个新的日期时间”这就是你的回答。他特别问,有没有更干净的方法。创建函数来完成这项工作是一种更干净的方法,但它使用的方法与他在幕后提到的方法相同。“没有”这就是问题的答案。你刚刚告诉他他已经说过他知道如何使用代码。也许,那么,这个问题应该转移到哲学。SE测试版,因为它的格式是如此深奥。就目前而言,既然它是如此,我们应该努力寻找解决实际问题的答案。@AaronBertrand-我不想争论,但问是否有这是一个更有效的方法(如果是的话,它是什么)是完全有效的。大多数情况下,答案是肯定的。这只是少数情况下答案是否定的。他的问题很好,而你的答案是好的。我真的不明白你为什么这么不正常。你得到了很多选票(包括我的一张)你的回答将对未来的用户有所帮助。了解某些技术不可能做到的事情是一件重要的事情。很抱歉冒犯了你。