code

SQL Server 2005, 날짜 조작에서 시간 차이를 찾기 위해 두 날짜를 비교하는 방법

codestyles 2020. 10. 26. 08:01
반응형

SQL Server 2005, 날짜 조작에서 시간 차이를 찾기 위해 두 날짜를 비교하는 방법


두 개의 열이 있습니다.

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


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

데이터베이스 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인 경우이 쿼리를 사용할 수도 있습니다.


아래 코드는 hh : mm 형식으로 제공됩니다.

RIGHT (LEFT (job_end- job_start, 17), 5) 선택


Take a look at DATEDIFF, this should be what you're looking for. It takes the two dates you're comparing, and the date unit you want the difference in (days, months, seconds...)


I used following logic and it worked for me like marvel:

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

If you trying to get worked hours with some accuracy, try this (tested in SQL Server 2016)

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

Various DATEDIFF functionalities are:

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');

Ref: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

참고URL : https://stackoverflow.com/questions/9521434/how-to-compare-two-dates-to-find-time-difference-in-sql-server-2005-date-manipu

반응형