web-dev-qa-db-ja.com

2つの日付を比較してSQL Server 2005の時間差を見つける方法、日付操作

2つの列があります。

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
71

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
...

アクションで見ることができます/ ここで遊んでください

121
James Hill

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)
19

結果をTIMEとしてキャストすると、結果は間隔の期間の時間形式になります。

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

job_start&job_endの間に時間のギャップが必要だと思います。

これを試して...

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

私はこれで終わった。

01:14:37
5

開始日と終了日を宣言する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

2
user6474160

以下のコードはhh:mm形式です。

rIGHT(LEFT(job_end- job_start、17)、5)を選択します

0
Nandhakumar S

DATEDIFF を見てください。これはあなたが探しているものです。比較する2つの日付と、差を求める日付単位(日、月、秒...)が必要です。

0
Sam DeHaan

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
0
Vikash Rakshit

私は次のロジックを使用し、それは驚異のように私のために働いた:

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

ある程度の正確さで勤務時間を取得しようとしている場合は、これを試してください(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/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

0
rchacko

データベースが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の場合、このクエリも使用できます。

0
tapos ghosh