복붙노트

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

SQL

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

해결법

  1. ==============================

    1.참조 DateDiff () 함수를 살펴 보자.

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

    당신은 / 액션에서 볼 여기로 재생할 수 있습니다

  2. ==============================

    2.당신은 분, 초, 일 등의 차이를 얻기 위해 DATEDIFF 기능을 사용할 수 있습니다

    당신은 분, 초, 일 등의 차이를 얻기 위해 DATEDIFF 기능을 사용할 수 있습니다

    SELECT DATEDIFF(MINUTE,job_start,job_end)
    

    MINUTE 분명히 분의 차이를 반환, 당신은 또한 하루, 시간, 두 번째는, YEAR (도서 전체 목록에 대한 온라인 링크 참조)를 사용할 수 있습니다.

    01 : 15 : 00 : 당신이 공상을 얻고 싶은 경우에 당신은 다른 예를 들어 75 분, 다음과 같이 표시 될 수있는이 보여줄 수 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)
    
  3. ==============================

    3.TIME으로 결과를 전송하고 그 결과는 구간의 지속 시간의 형식 일 것이다.

    TIME으로 결과를 전송하고 그 결과는 구간의 지속 시간의 형식 일 것이다.

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

    4.난 당신이 job_start & job_end 사이의 시간 간격을 필요가 있다고 생각합니다.

    난 당신이 job_start & job_end 사이의 시간 간격을 필요가 있다고 생각합니다.

    이 시도...

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

    나는이 함께했다.

    01:14:37
    
  5. ==============================

    5.시작 및 종료 날짜를 선언 @SDATE AS DATETIME 선언

    시작 및 종료 날짜를 선언 @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())
    

    MI : SS : MMM (24H) 형식 - HH의 결과를 가져옵니다 SELECT CONVERT (VARCHAR (12) DATEADD (MS, DATEDIFF (MS, @START_DATE, @END_DATE), 0), (114)) AS TimeDiff

  6. ==============================

    6.는 SQL 서버에서 이것을 시도

    는 SQL 서버에서 이것을 시도

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

    7.데이터베이스 상영 = 7시 0분 0초 및 ENDTIME = 14시 0분 0초, 두 시간 유형이 있다면. 시간 차이를 얻을 수 귀하의 질의는 다음과 같습니다

    데이터베이스 상영 = 7시 0분 0초 및 ENDTIME = 14시 0분 0초, 두 시간 유형이 있다면. 시간 차이를 얻을 수 귀하의 질의는 다음과 같습니다

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

    데이터베이스의 startDate = 2014년 7월 20일 7시 0분 0초 및 ENDTIME = 2014년 7월 20일 23시 0분 0초 경우에도이 쿼리를 사용할 수 있습니다.

  8. ==============================

    8.다음 코드는 HH에 제공 : mm 형식을.

    다음 코드는 HH에 제공 : mm 형식을.

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

  9. ==============================

    9.DATEDIFF를 살펴 보자,이 당신을 위해 무엇을 찾고있는 사람이어야한다. 그것은 당신이 비교하고 두 날짜 소요되며, 날짜 단위는 당신의 차이를 원하는 (일, 월, 초 ...)

    DATEDIFF를 살펴 보자,이 당신을 위해 무엇을 찾고있는 사람이어야한다. 그것은 당신이 비교하고 두 날짜 소요되며, 날짜 단위는 당신의 차이를 원하는 (일, 월, 초 ...)

  10. ==============================

    10.나는 논리를 다음 사용하고는 놀라운처럼 나를 위해 일한 :

    나는 논리를 다음 사용하고는 놀라운처럼 나를 위해 일한 :

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

    11.일부 정확하게 시간을 흥분하려고하면, 이것을 시도 (2016 SQL 서버에서 테스트)

    일부 정확하게 시간을 흥분하려고하면, 이것을 시도 (2016 SQL 서버에서 테스트)

    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

  12. from https://stackoverflow.com/questions/9521434/how-to-compare-two-dates-to-find-time-difference-in-sql-server-2005-date-manipu by cc-by-sa and MIT license