簡體   English   中英

如何比較兩個日期以查找SQL Server 2005中的時差,日期操作

[英]How to compare two dates to find time difference in SQL Server 2005, date manipulation

我有兩列:

job_start                         job_end
2011-11-02 12:20:37.247           2011-11-02 13:35:14.613

使用T-SQL如何找到作業開始到結束之間經過的原始時間?

我嘗試了這個:

select    (job_end - job_start) from tableA

但最終結果是:

1900-01-01 01:14:37.367

看一下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
...

您可以在操作中看到它/ 在這里玩

您可以使用DATEDIFF函數獲取分鍾,秒,天等之間的差異。

SELECT DATEDIFF(MINUTE,job_start,job_end)

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)

將結果強制轉換為TIME ,結果將以時間間隔的時間格式顯示。

select CAST(job_end - job_start) AS TIME(0)) from tableA

我認為您需要job_start和job_end之間的時間間隔。

嘗試這個...

select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA

我結束了這個。

01:14:37

聲明開始日期和結束日期DECLARE @SDATE AS DATETIME

TART_DATE  AS DATETIME
DECLARE @END_-- Set Start and End date
SET @START_DATE = GETDATE()
SET @END_DATE    = DATEADD(SECOND, 3910, GETDATE())

-以HH:MI:SS:MMM(24H)格式獲取結果SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff

如果您的數據庫StartTime = 07:00:00和endtime = 14:00:00都是時間類型。 您的查詢以獲取時差為:

SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name

如果您的數據庫startDate = 2014-07-20 07:00:00和endtime = 2014-07-20 23:00:00 ,則還可以使用此查詢。

在Sql Server中嘗試一下

SELECT 
      start_date as firstdate,end_date as seconddate
       ,cast(datediff(MI,start_date,end_date)as decimal(10,3)) as minutediff
      ,cast(cast(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) as int ) as varchar(10)) + ' ' + 'Days' + ' ' 
      + cast(cast((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) - 
        floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)) ) * 24 as int) as varchar(10)) + ':' 

     + cast( cast(((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) 
      - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24
        -
        cast(floor((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) 
      - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24) as decimal)) * 60 as int) as varchar(10))

    FROM [AdventureWorks2012].dbo.learndate

下面的代碼以hh:mm格式給出。

選擇RIGHT(LEFT(job_end- job_start,17),5)

我使用了以下邏輯,它像奇跡般為我工作:

CONVERT(TIME, DATEADD(MINUTE, DATEDIFF(MINUTE, AP.Time_IN, AP.Time_OUT), 0)) 

如果您嘗試以一定的准確性獲得工作時間,請嘗試一下(在SQL Server 2016中測試)

SELECT DATEDIFF(MINUTE,job_start, job_end)/60.00;

各種DATEDIFF功能是:

SELECT DATEDIFF(year,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter,     '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month,       '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear,   '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day,         '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

參考: https : //docs.microsoft.com/zh-cn/sql/t-sql/functions/datediff-transact-sql? view = sql-server- 2017

看看DATEDIFF ,這應該是您想要的。 它需要您比較的兩個日期,以及您想要的差異的日期單位(天,月,秒...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM