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时间。