Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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中向DateTime添加时间_Sql_Sql Server 2008_Datetime - Fatal编程技术网

如何在SQL中向DateTime添加时间

如何在SQL中向DateTime添加时间,sql,sql-server-2008,datetime,Sql,Sql Server 2008,Datetime,我正在尝试在SQL Server 2008 R2中将自定义时间添加到日期时间 以下是我尝试过的 SELECT DATEADD(hh, 03, DATEADD(mi, 30, DATEADD(ss, 00, DATEDIFF(dd, 0,GETDATE())))) as Customtime 使用上面的查询,我能够实现它 但是,是否已有任何速记方法可以将自定义时间添加到datetime中?试试这个 SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()),

我正在尝试在SQL Server 2008 R2中将自定义时间添加到日期时间

以下是我尝试过的

SELECT DATEADD(hh, 03, DATEADD(mi, 30, DATEADD(ss, 00, DATEDIFF(dd, 0,GETDATE())))) as Customtime
使用上面的查询,我能够实现它

但是,是否已有任何速记方法可以将自定义时间添加到datetime中?

试试这个

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), '03:30:00')
试试这个:

SELECT  DATEDIFF(dd, 0,GETDATE()) + CONVERT(DATETIME,'03:30:00.000')

或者尝试使用时间数据类型的替代方法:

DECLARE @MyTime TIME = '03:30:00', @MyDay DATETIME = CAST(GETDATE() AS DATE)

SELECT @MyDay+@MyTime
试试这个

SELECT DATEADD(MINUTE,HOW_MANY_MINUTES,TO_WHICH_TIME)
这里的
MINUTE
是常量,表示er将把
中的分钟加/减到\u哪个\u TIME
说明符
多少分钟
是我们需要添加分钟的间隔,如果指定为负数,时间将被减去,否则将被添加到
到\u哪个时间
说明符和
到\u哪个时间
是您添加到
分钟
的原始时间


希望这有帮助。

开始一天的时间:
选择DATEADD(Day,DATEDIFF(Day,0,GETDATE()),'00:00'


结束日期时间:
选择DATEADD(Day,DATEDIFF(Day,0,GETDATE()),'23:59:59')

对于我来说,这段代码看起来更明确:

CAST(@SomeDate AS datetime) + CAST(@SomeTime AS datetime)

以下内容很简单,适用于SQL Server 2008(SP3)及更高版本:

输出:

Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 
Mar 15 2017  6:17PM
Mar 15 2017  7:17PM
Mar 15 2017  1:00AM
你可以做:

SELECT GETDATE()+'03:30:00'

你不需要分秒必争的时间,不管是什么情况。将时间转换为午夜后的秒数,然后将其添加到日期中。这应该适用于任何支持DATEADD和DATEDIFF的SQL版本

SELECT DATEADD(SECOND, DATEDIFF(SECOND, '00:00:00', '14:30:00'), '2021-01-01') AS 
COMBINED_DATETIME

谢谢使用
CONVERT()
有什么原因吗?如果不使用
CONVERT()
错误:
数据类型datetime和time在add运算符中不兼容。
时间和datetime之间的隐式转换是可能的,但可以相互添加。不要问。两个操作符都使用DATETIME:
DECLARE@MyTime-DATETIME='03:30:00',@MyDay-DATETIME=CAST(GETDATE()作为日期)选择@MyDay+@MyTime
@date+cast(@time作为datetime),其中date是datetime类型,time是datetime类型time@MoonStom您的评论是错误的,因为OP想要添加“自定义时间”,而不仅仅是时间。请看这里给出的错误答案。它为当前的
GETDATE()
添加了三个半小时。这里的OP需要一个静态时间成分
03:30:00
,因此在进行计算之前,有必要删除当前时间(强制转换为日期)或将其设置为午夜(可能使用
DATEDIFF
,就像在其他几个答案中一样)。如果您发布了这样的答案,请提供解释。为什么您认为您的查询解决了原始问题?这根本不能回答问题。
DECLARE @DDate      date        -- To store the current date
DECLARE @DTime      time        -- To store the current time
DECLARE @DateTime   datetime    -- To store the result of the concatenation
;
SET @DDate      =   GETDATE()   -- Getting the current date
SET @DTime      =   GETDATE()   -- Getting the current time



SET @DateTime   =   CONVERT(datetime, CONVERT(varchar(19), LTRIM(@DDate) + ' ' + LTRIM(@DTime) ));
;
/*
    1. LTRIM the date and time do an automatic conversion of both types to string.
    2. The inside CONVERT to varchar(19) is needed, because you cannot do a direct conversion to datetime
    3. Once the inside conversion is done, the second do the final conversion to datetime.
*/  

-- The following select shows the initial variables and the result of the concatenation
SELECT @DDate, @DTime, @DateTime
SELECT DATEADD(SECOND, DATEDIFF(SECOND, '00:00:00', '14:30:00'), '2021-01-01') AS 
COMBINED_DATETIME