关于sql server:SQL中DateTime字段的时间部分

Time part of a DateTime Field in SQL

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


这将返回仅限时间

对于SQL Server:

1
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:

1
SELECT DATE_FORMAT(NOW(), '%H:%i:%s')


SQLFiddle演示


在SQL Server中,如果只需要hh:mi,则可以使用:

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)


如果只想要日期时间,则可以使用DATEPART() - SQL Server:

1
2
3
4
DECLARE @dt datetime
SET @dt = '2012-09-10 08:25:53'

SELECT datepart(HOUR, @dt) -- returns 8

在SQL Server 2008+中,您可以CAST()作为时间:

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:

    1
    SELECT CONVERT(datetime,CONVERT(VARCHAR,CURRENT_TIMESTAMP,112),112)

以上为您提供当天的开始日期。

  • 但是,在SQL Server 2008中,您可以这样说:

    1
    2
    3
    SELECT 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)与给定日期之间的差异(以整天为单位),然后从给定日期中减去该天数,从而将其日期组件设置为零。


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

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开始,您可以使用FORMAT(value,'format')

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


选择强制转换(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'