SQL Server 2005我想创建任务从datetime开始的小时

问题描述:

在SQL Server 2005上,我想创建一个表示我的任务开始的小时。我的日期时间是'2010-10-01 12:30:00:00',这是实际的开始时间。我想结束的是'12:00'这是任务开始的小时。关于如何放松'30分钟'的好主意?SQL Server 2005我想创建任务从datetime开始的小时

+0

你想要'12:00'(作为字符串)还是'2010-10-01T12:00:00'(仍然是日期时间值)? –

+0

我需要将它保留为日期时间值,以便我可以在'between'子句中使用它 –

declare @dt datetime 
set @dt = '2010-10-01 12:30:00.000' 
select convert(char(5), dateadd(hour, datediff(hour, 0, @dt), 0), 108) 

结果:

12:00 

为datetime

declare @dt datetime 
set @dt = '2010-10-01 12:30:00.000' 
select dateadd(hour, datediff(hour, 0, @dt), 0) 

结果:

2010-10-01 12:00:00.000 
+0

这正是我所需要的(如datetime)。无论如何,我只能得到时间,并保持它作为日期时间? –

+0

@Peter - 日期时间将始终有日期部分。如果您需要比较不同日期的时间,则可以在比较之前修改这些值以使其具有相同的日期部分。 –

+0

在比较之前,我将输入更改为字符串值,并且完美地工作,感谢您的帮助 –

如果你只是想消除datetime值分/秒/磨粉机,而是把它作为一个日期,使用DATEADD/DATEDIFF

select DATEADD(hour,DATEDIFF(hour,0,`2010-10-01T12:30:00`),0) 

将返回2010-10-01T12:00:00

+0

我只能得到时间吗? –

+0

SQL Server * * 2008之前唯一与datetime相关的datetype是'datetime'。即使你没有指定它们,例如用于初始化它的字符串文字,它总是有日期和时间组件。如果您只想比较两个日期时间的小时部分,忽略两个日期并忽略分钟,则可使用DATEPART(小时,)'并比较整数。 –

+0

嗨达米安,我跟着你和米卡尔的建议,只是改变了输入日期,以便我只能比较时间(小时)。非常感谢你对此的帮助。一切都很好 –

这会做你想要什么:

SELECT DATEADD(hh, DATEDIFF(hh, '20000101', [DateField]), '20000101')