SQL中DateTime字段的时间部分

我将如何能够在SQL中提取DateTime字段的时间部分? 对于我的项目,我不得不返回date时间为5pm的时间戳的数据

在SQL Server中,如果只需要hh:mi ,则可以使用:

 DECLARE @datetime datetime SELECT @datetime = GETDATE() SELECT RIGHT('0'+CAST(DATEPART(hour, @datetime) as varchar(2)),2) + ':' + RIGHT('0'+CAST(DATEPART(minute, @datetime)as varchar(2)),2) 

这将返回只有时间

对于SQL Server:

 SELECT convert(varchar(8), getdate(), 108) 

说明:

getDate()正在给出当前的date和时间。
108正在格式化/给我们所需的部分,即在这种情况下的时间。
varchar(8)给了我们这个部分的字符数。
喜欢:
如果你写了varchar(7) ,它会给你00:00:0
如果你写了varchar(6) ,它会给你00:00:
如果你写了varchar(15) ,它仍然会给你00:00:00因为它只给出时间部分的输出。 SQLFiddle演示

对于MySQL:

 SELECT DATE_FORMAT(NOW(), '%H:%i:%s') 

SQLFiddle演示

如果你只想要你的date时间,那么你可以使用DATEPART() – SQL Server:

 declare @dt datetime set @dt = '2012-09-10 08:25:53' select datepart(hour, @dt) -- returns 8 

在SQL Server 2008+中,您可以CAST()作为时间:

 declare @dt datetime set @dt = '2012-09-10 08:25:53' select CAST(@dt as time) -- returns 08:25:53 

在SQL Server 2008中试试这个:

 select * from some_table t where convert(time,t.some_datetime_column) = '5pm' 

如果你想随机取一个date时间值并对其进行调整,以便时间组件是下午5点,那么在SQL Server 2008中有很多方法。 首先你需要开始的一天(例如,2011-09-30 00:00:00:00)。

  • 一种适用于所有版本的Microsoft SQL Server以及所有版本的Sybase的技术是使用convert/3将datetime值转换为缺less时间分量然后返回到datetime值的varchar:

     select convert(datetime,convert(varchar,current_timestamp,112),112) 

以上给出了当天的开始。

  • 但在SQL Server 2008中,可以这样说:

     select start_of_day = t.some_datetime_column - convert(time, t.some_datetime_column ) , from some_table t 

    这可能会更快。

一旦你有了开始,下午5点很容易。 只需将17小时添加到您的每日价值中:

 select five_pm = dateadd(hour,17, t.some_datetime_column - convert(time,t.some_datetime_column) ) from some_table t 

我知道这是一个老问题,但是因为另一个答案

  • 返回string(而不是date时间),
  • 依靠date的内部表示(转换为float,int和back)或者
  • 需要SQL Server 2008或更高版本,

我以为我会添加一个“纯”的选项,只需要date时间的操作和SQL Server 2005+的作品:

 SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime) 

这将计算date零(1900-01-01)和给定date之间的差异(整天),然后从给定date中减去该天数,从而将其date分量设置为零。

“对于我的项目,我不得不返回具有DateTime字段5pm的时间戳的数据,无论date是什么。”

所以我想你的意思是你需要date,而不是时间。 你可以做这样的事情来得到一个date为5点的时间:

 SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00' 

这应该剥离date部分:

 select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate() 

并返回默认date为1900-01-01的date时间。