55

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

4

13 回答 13

68

这将返回 time-Only

对于 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

于 2012-09-10T15:23:50.110 回答
37

在 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)
于 2012-09-10T15:26:23.410 回答
29

如果您只想要日期时间的小时,那么您可以使用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
于 2012-09-10T15:24:37.857 回答
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,然后再转换回 datetime 值:

    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
于 2012-09-10T17:56:59.263 回答
8

我知道这是一个老问题,但由于其他答案都是

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

我想我会添加一个“纯”选项,它只需要日期时间操作并适用于 SQL Server 2005+:

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

这将计算日期零 (1900-01-01) 和给定日期之间的差异(以天为单位),然后从给定日期中减去该天数,从而将其日期部分设置为零。

于 2015-11-11T09:12:37.953 回答
5

请注意,从 MS SQL 2012 起,您可以使用FORMAT(value,'format')

例如WHERE FORMAT(YourDatetime,'HH:mm') = '17:00'

于 2019-06-18T10:53:40.137 回答
2

“对于我的项目,无论日期是什么,我都必须返回 DateTime 字段的时间戳为下午 5 点的数据。”

所以我认为你的意思是你需要日期,而不是时间。您可以执行以下操作来获取以 5:00 为时间的日期:

SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
于 2012-09-10T16:08:52.330 回答
2

这应该去掉日期部分:

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

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

于 2015-07-15T18:12:33.470 回答
2

您可以CONVERT(TIME,GETDATE())在这种情况下使用:

INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))

或者如果你想打印它或返回那个时间,像这样使用:

DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
于 2018-04-30T14:41:04.610 回答
2

选择演员(getdate()作为时间(0))

例如返回:- 15:19:43

将 getdate() 替换为您要从中提取时间的日期时间!

于 2018-10-10T14:21:20.997 回答
1
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'
于 2018-02-25T07:33:27.973 回答
0

年份:

SELECT DATEPART(YEAR, '2021-03-21' );

小时:

SELECT DATEPART(HOUR, '2021-03-21 08:50:30' );
于 2021-03-28T17:58:36.217 回答
0
declare @datetime as datetime
set @datetime = getdate()
select cast(cast(@datetime as time) as varchar(8))
于 2021-09-22T09:34:34.097 回答