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
'code' 카테고리의 다른 글
Xcode 4에서 .h와 .m 사이를 전환하는 방법 (0) | 2020.10.26 |
---|---|
UIWebView에 대해 sharedHTTPCookieStorage를 사용하여 쿠키를 수동으로 설정할 수 있습니까? (0) | 2020.10.26 |
하위 구성 요소의 메서드 호출 (0) | 2020.10.26 |
shift + tab의 키 코드는 무엇입니까? (0) | 2020.10.26 |
무엇을 선택해야하나요 : MongoDB / Cassandra / Redis / CouchDB? (0) | 2020.10.26 |