SQL中DateTime字段的时间部分

时间:2012-09-10 15:21:29

标签: sql sql-server sql-server-2008 tsql datetime

如何在SQL中提取DateTime字段的时间部分?对于我的项目,我必须返回时间戳为DateTime字段的下午5点的数据,无论日期是什么

11 个答案:

答案 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)

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

  • 返回字符串(而不是日期时间),
  • 依赖于日期的内部表示(转换为float,int和back)或
  • 需要SQL Server 2008或更高版本,

我以为我会添加一个纯粹的&#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' );