Time part of a DateTime Field in SQL
如何在SQL中提取DateTime字段的时间部分? 对于我的项目,无论日期是什么,我都必须返回DateTime字段的时间戳为5pm的数据
这将返回仅限时间
对于SQL Server:
1 | SELECT CONVERT(VARCHAR(8), getdate(), 108) |
说明:
喜欢:
如果你在那里写了
如果你在那里写了
如果你在那里写了
SQLFiddle Demo
<击>
对于MySQL:
1 | SELECT DATE_FORMAT(NOW(), '%H:%i:%s') |
击>
SQLFiddle演示 strike>
在SQL Server中,如果只需要
1 2 3 4 5 6 | 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) |
如果只想要日期时间,则可以使用
1 2 3 4 | DECLARE @dt datetime SET @dt = '2012-09-10 08:25:53' SELECT datepart(HOUR, @dt) -- returns 8 |
在SQL Server 2008+中,您可以
1 2 3 4 | DECLARE @dt datetime SET @dt = '2012-09-10 08:25:53' SELECT CAST(@dt AS TIME) -- returns 08:25:53 |
在SQL Server 2008中试试这个:
1 2 3 | SELECT * FROM some_table t WHERE CONVERT(TIME,t.some_datetime_column) = '5pm' |
如果你想要一个随机的日期时间值并调整它以使时间组件是下午5点,那么在SQL Server 2008中有很多种方法。首先,您需要开始一天(例如,2011-09-30 00:00:00.000)。
-
一种适用于所有版本的Microsoft SQL Server以及所有Sybase版本的技术是使用
convert/3 将datetime值转换为缺少时间组件然后返回到datetime值的varchar:1SELECT CONVERT(datetime,CONVERT(VARCHAR,CURRENT_TIMESTAMP,112),112)
以上为您提供当天的开始日期。
-
但是,在SQL Server 2008中,您可以这样说:
1
2
3SELECT start_of_day = t.some_datetime_column
- CONVERT(TIME, t.some_datetime_column ) ,
FROM some_table t这可能更快。
一旦你有一天的开始,到下午5点很容易。只需将17小时添加到您的日期值:
1 2 3 4 | SELECT five_pm = dateadd(HOUR,17, t.some_datetime_column - CONVERT(TIME,t.some_datetime_column) ) FROM some_table t |
我知道这是一个老问题,但是因为另一个回答了所有问题
- 返回字符串(而不是日期时间),
- 依赖于日期的内部表示(转换为float,int和back)或
- 需要SQL Server 2008或更高版本,
我以为我会添加一个"纯"选项,只需要日期时间操作并与SQL Server 2005+一起使用:
1 | SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime) |
这将计算日期零(1900-01-01)与给定日期之间的差异(以整天为单位),然后从给定日期中减去该天数,从而将其日期组件设置为零。
你可以在这种情况下使用
1 2 3 | INSERT INTO infoTbl (itDate, itTime) VALUES (GETDATE(),CONVERT(TIME,GETDATE())) |
或者如果你想打印它或返回那个时间使用如下:
1 2 3 | DECLARE @dt TIME SET @dt = CONVERT(TIME,GETDATE()) PRINT @dt |
这应该删除日期部分:
1 | SELECT CONVERT(datetime,CONVERT(FLOAT, getdate()) - CONVERT(INT,getdate())), getdate() |
并返回日期时间,默认日期为1900-01-01。
"对于我的项目,我必须返回时间戳为DateTime字段的下午5点的数据,无论日期是什么。"
所以我认为你的意思是你需要的是日期,而不是时间。你可以做这样的事情来获得一个5:00的日期作为时间:
1 | SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00' |
请注意,从MS SQL 2012开始,您可以使用
例如
选择强制转换(getdate()为时间(0))
返回例如: - 15:19:43
将getdate()替换为您想要从中提取时间的日期时间!
1 2 3 4 5 6 | SELECT DISTINCT CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108) FROM CONSOLIDATED_LIST AS A WHERE CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108) BETWEEN '15:00:00' AND '15:45:00' |