Sql 仅从Datetime列中减去时间
我有一个表中的两列,分别是Sql 仅从Datetime列中减去时间,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个表中的两列,分别是@ABC作为DateTime和@xyz作为DateTime–数据类型 我只想减去时间,我试着这样做: CREATE FUNCTION GetTimeDifference ( @FirstDate datetime, @SecondDate datetime ) RETURNS varchar(10) AS BEGIN DECLARE @Difference INT DECLARE @FirstTimeInMin INT DECLARE @SecondTimeInMin
@ABC作为DateTime
和@xyz作为DateTime
–数据类型
我只想减去时间,我试着这样做:
CREATE FUNCTION GetTimeDifference
(
@FirstDate datetime,
@SecondDate datetime
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @Difference INT
DECLARE @FirstTimeInMin INT
DECLARE @SecondTimeInMin INT
SELECT @FirstTimeInMin =
(DATEPART(hour,@FirstDate) * 60 + DATEPART(minute,@FirstDate))
SELECT @SecondTimeInMin =
(DATEPART(hour,@SecondDate) * 60 + DATEPART(minute,@SecondDate))
IF @FirstTimeInMin = 0
SET @FirstTimeInMin = 24 * 60
IF @SecondTimeInMin = 0
SET @SecondTimeInMin = 24 * 60
SET @Difference = @FirstTimeInMin - @SecondTimeInMin
IF(@Difference < 0)
SET @Difference = @Difference * -1
RETURN RIGHT('0' + CONVERT(varchar(10), @Difference / 60), 2)
+ ':' +
RIGHT('0' + CONVERT(varchar(10), @Difference - (@Difference / 60) * 60 ), 2)
END
GO
SELECT dbo.GetTimeDifference('02/02/2012 6:10:00 PM','01/01/2001 12:00:00 AM')
对于ABC=21/02/2012下午6:10:00
和XYZ=01/01/2001上午12:00:00
->第一排
CONVERT(varchar(10), dbo.checkingtime.ABC – dbo.checkingtime.XYZ, 108)
我得到的结果是18:10
,但我希望结果是05:50
,时间仅为小时和分钟
可能吗 这是你想要的东西。这是内置函数,但我建议您构建自己的函数
DATEDIFF ( datepart , startdate , enddate )
请注意,您需要“屏蔽”同一天的开始和结束日期,以获得您想要的结果(这就是时间差)。结果将以分钟为单位,但您可以轻松地将其格式化为小时:分钟
干杯您可以尝试以下功能:
CREATE FUNCTION GetTimeDifference
(
@FirstDate datetime,
@SecondDate datetime
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @Difference INT
DECLARE @FirstTimeInMin INT
DECLARE @SecondTimeInMin INT
SELECT @FirstTimeInMin =
(DATEPART(hour,@FirstDate) * 60 + DATEPART(minute,@FirstDate))
SELECT @SecondTimeInMin =
(DATEPART(hour,@SecondDate) * 60 + DATEPART(minute,@SecondDate))
IF @FirstTimeInMin = 0
SET @FirstTimeInMin = 24 * 60
IF @SecondTimeInMin = 0
SET @SecondTimeInMin = 24 * 60
SET @Difference = @FirstTimeInMin - @SecondTimeInMin
IF(@Difference < 0)
SET @Difference = @Difference * -1
RETURN RIGHT('0' + CONVERT(varchar(10), @Difference / 60), 2)
+ ':' +
RIGHT('0' + CONVERT(varchar(10), @Difference - (@Difference / 60) * 60 ), 2)
END
GO
SELECT dbo.GetTimeDifference('02/02/2012 6:10:00 PM','01/01/2001 12:00:00 AM')
结果应该是05:50这样就可以了
select right(date2-date1,7) as time from table1
结果:
TIME
5:50AM
我发现了一个很好的例子:
Select start_date, end_date, time_diff,
EXTRACT(DAY FROM time_diff) days,
EXTRACT(HOUR FROM time_diff) hours,
EXTRACT(MINUTE FROM time_diff) minutes,
EXTRACT(SECOND FROM time_diff) seconds
From
(
Select start_date, end_date, end_date - start_date time_diff
From
(
Select CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy hh:mi:ss am') AS TIMESTAMP) end_date
, CAST(to_date('01/01/2012 12:00:00 am', 'dd/mm/yyyy hh:mi:ss am') AS TIMESTAMP) start_date
From dual
))
/
从
6:10 pm
减去午夜应该得到05:50
,这有什么意义?如果减法是另一种方式,这可能是有意义的……两个日期之间只需要几个小时的差吗?