如何比较两个日期以查找SQL Server 2005中的时差,日期操作

som*_*ool 72 sql datediff sql-server-2005 date

我有两列:

job_start                         job_end
2011-11-02 12:20:37.247           2011-11-02 13:35:14.613
Run Code Online (Sandbox Code Playgroud)

如何使用T-SQL查找作业开始和作业结束之间经过的原始时间量?

我试过这个:

select    (job_end - job_start) from tableA
Run Code Online (Sandbox Code Playgroud)

但结果是:

1900-01-01 01:14:37.367
Run Code Online (Sandbox Code Playgroud)

Jam*_*ill 122

看看这个DateDiff()功能.

-- Syntax
-- DATEDIFF ( datepart , startdate , enddate )

-- Example usage
SELECT DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDiff
SELECT DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDiff
SELECT DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDiff
SELECT DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDiff
SELECT DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDiff
...
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到它在行动/ 玩它


Vin*_*zzi 19

你可以使用DATEDIFF函数来获得分钟,秒,天等的差异.

SELECT DATEDIFF(MINUTE,job_start,job_end)
Run Code Online (Sandbox Code Playgroud)

MINUTE显然会以分钟为单位返回差异,您也可以使用DAY,HOUR,SECOND,YEAR(有关完整列表,请参阅书籍在线链接).

如果你想得到想象,你可以用不同的方式显示,例如75分钟可以显示如下:01:15:00:0

以下是为SQL Server 2005和2008执行此操作的代码

-- SQL Server 2005
SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000'),114)

-- SQL Server 2008
SELECT CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000') AS TIME)
Run Code Online (Sandbox Code Playgroud)


小智 12

将结果转换为结果,TIME结果将以时间格式显示间隔的持续时间.

select CAST(job_end - job_start) AS TIME(0)) from tableA
Run Code Online (Sandbox Code Playgroud)

  • 很棒,这就是我正在寻找的东西.谢谢! (2认同)

小智 5

我认为你需要job_start和job_end之间的时间差距.

试试这个...

select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
Run Code Online (Sandbox Code Playgroud)

我最终得到了这个.

01:14:37
Run Code Online (Sandbox Code Playgroud)