我应该如何在SQL中提取DateTime字段的时间部分?为了我的项目,我需要返回一个具有5 pm时间戳的DateTime字段数据,无论日期是什么。
我应该如何在SQL中提取DateTime字段的时间部分?为了我的项目,我需要返回一个具有5 pm时间戳的DateTime字段数据,无论日期是什么。
这将仅返回时间。
对于 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演示
SELECT DATE_FORMAT(NOW(), '%H:%i:%s')
如果在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)
如果您只想获取日期时间中的小时部分,您可以使用 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
我知道这是一个老问题了,但因为其他答案:
因此,我想添加一个“纯净”选项,它只需要日期时间操作,并且适用于SQL Server 2005+:
SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)
这个函数计算给定日期与零日期(1900年1月1日)之间的差值(以整天为单位),然后从给定日期中减去这些天数,从而将其日期成分设置为零。
SELECT CAST(mydatetime AS time)
表达同样的意思(从其他答案推断得出)。 - Jeppe Stig Nielsenmytable
的表,其中有一列名为 mydatetime
,类型为 (datetime, not null)
,对我来说这很好用:SELECT CAST(mydatetime AS time) AS TimePart, * FROM mytable
。 - Jeppe Stig Nielsen在SQL Server 2008中尝试以下方法:
select *
from some_table t
where convert(time,t.some_datetime_column) = '5pm'
如果你想获取一个随机的日期时间值,并将其调整为下午5点,则在SQL Server 2008中有多种方法。首先,你需要获取当天的起始时间(例如,2011年9月30日00:00:00.000)。
One technique that works for all versions of Microsoft SQL Server as well as all versions of Sybase is to use convert/3
to convert the datetime value to a varchar that lacks a time component and then back into a datetime value:
select convert(datetime,convert(varchar,current_timestamp,112),112)
In SQL Server 2008, though, you can say something like this:
select start_of_day = t.some_datetime_column
- convert(time, t.some_datetime_column ) ,
from some_table t
which is likely faster.
一旦您确定了起始时间,那么到下午5点就轻松了。只需将17小时添加到起始时间值即可:
select five_pm = dateadd(hour,17, t.some_datetime_column
- convert(time,t.some_datetime_column)
)
from some_table t
注意,从 MS SQL 2012 开始,您可以使用 FORMAT(value,'format')
。
例如:WHERE FORMAT(YourDatetime,'HH:mm') = '17:00'
在这种情况下,您可以使用CONVERT(TIME,GETDATE())
:
INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))
DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
选择将getdate()转换为time(0)格式:
返回结果示例:15:19:43
将getdate()替换为您想从中提取时间的日期时间即可!
"对于我的项目,我需要返回一个日期时间字段的时间戳为下午5点的数据,无论日期是什么。"
所以我认为你想要的是日期,而不是时间。您可以通过以下方式获取时间为5:00的日期:
SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
这将去掉日期部分:
select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate()
floor(convert(float))
,而不是 convert(int)
。convert(datetime, convert(float, ok_date_added) - floor(convert(float, ok_date_added)))
- Rijen