如何在SQL中提取DateTime字段的时间部分?对于我的项目,我必须返回时间戳为DateTime字段的下午5点的数据,无论日期是什么
答案 0 :(得分:50)
这将返回仅限时间
对于SQL Server:
SELECT convert(varchar(8), getdate(), 108)
说明:
getDate()
提供当前日期和时间
108
正在格式化/给我们所需的部分,即在这种情况下的时间
varchar(8)
给出了该部分的字符数
的像:强>
如果你在那里写了varchar(7)
,它会给你00:00:0
如果你在那里写了varchar(6)
,它会给你00:00:
如果你在那里写了varchar(15)
,它仍然会给你00:00:00
,因为它只给出时间部分的输出。
SQLFiddle Demo
<击> 对于MySQL:
SELECT DATE_FORMAT(NOW(), '%H:%i:%s')
击> <击> 撞击>
SQLFiddle Demo
答案 1 :(得分:32)
在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)
答案 2 :(得分:26)
如果您只想要日期时间,则可以使用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
答案 3 :(得分:8)
在SQL Server 2008中尝试:
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值转换为缺少时间组件的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
答案 4 :(得分:7)
我知道这是一个老问题,但是因为另一个回答所有
我以为我会添加一个纯粹的&#34;选项,只需要日期时间操作并与SQL Server 2005 +一起使用:
SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)
计算日期零(1900-01-01)与给定日期之间的差异(全天),然后从给定日期减去该天数,从而将其日期组件设置为零。
答案 5 :(得分:2)
“对于我的项目,我必须返回时间戳为DateTime字段的下午5点的数据,无论日期是什么。”
所以我认为你的意思是你需要约会,而不是时间。你可以做这样的事情来获得一个5:00的日期作为时间:
SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
答案 6 :(得分:2)
这应该删除日期部分:
select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate()
并返回日期时间,默认日期为1900-01-01。
答案 7 :(得分:2)
在这种情况下你可以使用CONVERT(TIME,GETDATE())
:
INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))
或者如果你想要打印它或返回那个时间使用如下:
DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
答案 8 :(得分:1)
选择演员表(getdate()作为时间(0))
返回例如:-15:19:43
将getdate()替换为您要从中提取时间的日期时间!
答案 9 :(得分:1)
请注意,从MS SQL 2012开始,您可以使用FORMAT(value,'format')
例如WHERE FORMAT(YourDatetime,'HH:mm') = '17:00'
答案 10 :(得分:0)
年份:
SELECT DATEPART(YEAR, '2021-03-21' );
小时:
SELECT DATEPART(HOUR, '2021-03-21 08:50:30' );