[SQL] SQL 서버에 두 개의 날짜 시간의 차이
SQLSQL 서버에 두 개의 날짜 시간의 차이
SQL 서버에서 두 날짜 사이의 차이를 취할 수있는 방법이 있습니까?
예를 들어, 내 날짜는
그래서, 결과는 14.063 초해야합니다.
해결법
-
==============================
1.참조 DateDiff에 대한 추가 다만주의해야 할 점은, 당신이 정확한 시간 범위를 찾고 있다면 그래서 문제에 따라, 당신은 당신이 당신의 단위로 지정한 경계를 통과 횟수를 계산합니다. 예를 들면
참조 DateDiff에 대한 추가 다만주의해야 할 점은, 당신이 정확한 시간 범위를 찾고 있다면 그래서 문제에 따라, 당신은 당신이 당신의 단위로 지정한 경계를 통과 횟수를 계산합니다. 예를 들면
select datediff (m, '20100131', '20100201')
이 스팬 2 일 순간에도, 2 월 월부터 경계를 넘어 때문에, 하나의 답을 제공, DATEDIFF의 값은 1을 반환 - 그것은 1 일의 경계를 넘어.
select datediff(mi, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')
1의 값을 부여, 다시, 그것은이 약 14초 그래서 비록 한 번 분 경계를 통과 단위로 분을 사용하는 경우는, 단일 분으로 반환됩니다.
-
==============================
2.
SELECT DATEDIFF (MyUnits, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
MSDN에 DATEDIFF에 따라 대체 "MyUnits"
-
==============================
3.
SELECT DATEDIFF(day, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
두 번째처럼, 당신은 차이를 얻으려면 다른 단위로 하루를 교체, 분 등
-
==============================
4.나는 매우 유용 할 수 있습니다 MS SQL 서버의 네 가지 중요한 기능을 언급 할 수 있습니다 :
나는 매우 유용 할 수 있습니다 MS SQL 서버의 네 가지 중요한 기능을 언급 할 수 있습니다 :
1) 함수 DATEDIFF ()는 두 날짜 사이의 계산의 차이에 대한 책임, 결과는 첫 번째 매개 변수 (날짜 부분)에 지정된 "올해 분기 월 DAYOFYEAR 일 주 시간 분 초 밀리 초 마이크로 나노초", 수 :
select datediff(day,'1997-10-07','2011-09-11')
2) 당신은 어떤 날짜와 실제 날짜의 실제 시간과 계산의 차이를 얻을 수있는 함수 GETDATE ()를 사용할 수 있습니다 :
select datediff(day,'1997-10-07', getdate() )
3) 또 다른 중요한 기능은 하나의 기본 날짜에 양수 값) 또는 음의 값 빼기 ()을 (추가 할 수는 DATEDIFF의 같은 날짜 부분을 사용하여 날짜에 어떤 값을 변환하는 데 사용 DATEADD ()이다 :
select DATEADD(day, 45, getdate()) -- actual datetime adding 45 days select DATEADD( s,-638, getdate()) -- actual datetime subtracting 10 minutes and 38 seconds
4) 필요는 당신이 필요 같은 함수 CONVERT ()는이 날짜 형식을 파라 메트릭 기능이되지되었다, 그러나 당신은 당신과 같은 결과를 포맷 결과의 일부를 사용할 수 있습니다 :
select convert( char(8), getdate() , 8) -- part hh:mm:ss of actual datetime select convert( varchar, getdate() , 112) -- yyyymmdd select convert( char(10), getdate() , 20) -- yyyy-mm-dd limited by 10 characters
DATETIME 초 계산 감기 흥미로운 결과는 네 가지 기능은 이러한 형식화 차이를 보여 UM 혼합 시간, 분, 초 (HH : MM : SS) 두 날짜 간 :
declare @date1 datetime, @date2 datetime set @date1=DATEADD(s,-638,getdate()) set @date2=GETDATE() select convert(char(8),dateadd(s,datediff(s,@date1,@date2),'1900-1-1'),8)
... 결과 0시 10분 38초 (638s = 600S + 38 일 = 10 분 38초) 인
또 다른 예:
select distinct convert(char(8),dateadd(s,datediff(s, CRDATE , GETDATE() ),'1900-1-1'),8) from sysobjects order by 1
-
==============================
5.나는이 방법을 시도하고 일했다. 나는 SQL Server 버전 2016을 사용
나는이 방법을 시도하고 일했다. 나는 SQL Server 버전 2016을 사용
SELECT DATEDIFF(MILLISECOND,'2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')/1000.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
-
==============================
6.내부적으로 SQL 서버 날짜에 2 개 정수로 저장됩니다. 첫 번째 정수는 전 또는 기준일 (1900년 1월 1일) 이후 날짜의 수입니다. 클록 틱의 두 번째 정수 저장 자정 이후, 각 눈금은 1/300 초이다.
내부적으로 SQL 서버 날짜에 2 개 정수로 저장됩니다. 첫 번째 정수는 전 또는 기준일 (1900년 1월 1일) 이후 날짜의 수입니다. 클록 틱의 두 번째 정수 저장 자정 이후, 각 눈금은 1/300 초이다.
여기에 더 많은 정보
이 때문에, 나는 종종 날짜 단순히를 빼지하는 것입니다 비교하는 간단한 방법을 찾을 수 있습니다. 이것은 내 사용 사례의 90 %를 처리합니다. 예를 들면,
select date1, date2, date2 - date1 as DifferenceInDays from MyTable ...
내가 일 이외의 단위로 답을해야 할 때, 나는 참조 DateDiff를 사용합니다.
-
==============================
7.이 날짜의 차이를 보면하는 방법에는 여러 가지가 있으며, 더 많은 날짜 / 시간을 비교할 때. "SS : MM HH"저는 여기로 포맷 두 날짜 사이의 차이를 얻기 위해 무엇을 사용 :
이 날짜의 차이를 보면하는 방법에는 여러 가지가 있으며, 더 많은 날짜 / 시간을 비교할 때. "SS : MM HH"저는 여기로 포맷 두 날짜 사이의 차이를 얻기 위해 무엇을 사용 :
ElapsedTime AS RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) / 3600 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2)
나는 계산 된 열이를 사용하지만, 당신은 하찮게 UDF를 또는 쿼리 계산으로 다시 작성할 수 있습니다. 참고 소수점 이하의 초 아래로이 논리 라운드 그; 00 : 00.00 00 : 00.999 초 제로 간주되며 "0시 0분 0초"로 표시.
HH : MM : 당신이 기간이 긴 몇 일보다 할 수 있다는 예상되는 경우,이 코드는 D로 전환 SS 형식을 필요로 할 때 :
ElapsedTime AS CASE WHEN DATEDIFF(S, StartDate, EndDate) >= 359999 THEN CAST(DATEDIFF(S, StartDate, EndDate) / 86400 AS VARCHAR(7)) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 86400 / 3600 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2) ELSE RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) / 3600 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2) END
-
==============================
8.다음 쿼리는 당신이 찾고있는 정확한 재료를 제공해야합니다.
다음 쿼리는 당신이 찾고있는 정확한 재료를 제공해야합니다.
select datediff(second, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')
다음은 DATEDIFF 기능을 수행 할 수있는 모든 MSDN의 링크입니다. https://msdn.microsoft.com/en-us/library/ms189794.aspx
-
==============================
9.좋아 우리 모두가 알고있는 대답은 DATEDIFF () 포함한다. 그러나 당신이 후 수 있습니다 절반 만 결과를 제공합니다. 당신이이 개 DATETIME 값의 분의 관점에서 사람이 읽을 수있는 형식으로 결과 및 초를 얻으려면?
좋아 우리 모두가 알고있는 대답은 DATEDIFF () 포함한다. 그러나 당신이 후 수 있습니다 절반 만 결과를 제공합니다. 당신이이 개 DATETIME 값의 분의 관점에서 사람이 읽을 수있는 형식으로 결과 및 초를 얻으려면?
변환 (), DATEADD ()와 코스 DATEDIFF의은 () 함수는 클라이언트가 숫자 대신 사용할 수있는 더 쉽게 읽을 수있는 결과를 완벽.
즉
CONVERT(varchar(5), DATEADD(minute, DATEDIFF(MINUTE, date1, date2), 0), 114)
이것은 당신에게 뭔가를 줄 것이다 :
더 정밀도를 원한다면, 단지 VARCHAR 증가 ().
CONVERT(varchar(12), DATEADD(minute, DATEDIFF(MINUTE, date1, date2), 0), 114)
-
==============================
10.
SELECT DATEDIFF(yyyy, '2011/08/25', '2017/08/25') AS DateDiff
그것은 당신에게 올해의 두 날짜 사이의 차이를주는 것
여기서 (2017년부터 2011년까지)의 결과로서 6 =
통사론:
DATEDIFF(interval, date1, date2)
-
==============================
11.이 내 대답은 아니지만 난 그냥뿐만 아니라이 같은 질문에 대한 온라인 주위를 검색하는 동안이 발견 그래서. 이 사람은 계산 시간, 분, 초에 절차를 설정합니다. 링크 및 코드 :
이 내 대답은 아니지만 난 그냥뿐만 아니라이 같은 질문에 대한 온라인 주위를 검색하는 동안이 발견 그래서. 이 사람은 계산 시간, 분, 초에 절차를 설정합니다. 링크 및 코드 :
--Creating Function If OBJECT_ID('UFN_HourMinuteSecond') Is Not Null Drop Function dbo.UFN_HourMinuteSecond Go Exec( 'Create Function dbo.UFN_HourMinuteSecond ( @StartDateTime DateTime, @EndDateTime DateTime ) Returns Varchar(10) As Begin Declare @Seconds Int, @Minute Int, @Hour Int, @Elapsed Varchar(10) Select @Seconds = ABS(DateDiff(SECOND ,@StartDateTime,@EndDateTime)) If @Seconds >= 60 Begin select @Minute = @Seconds/60 select @Seconds = @Seconds%60 If @Minute >= 60 begin select @hour = @Minute/60 select @Minute = @Minute%60 end Else Goto Final End Final: Select @Hour = Isnull(@Hour,0), @Minute = IsNull(@Minute,0), @Seconds = IsNull(@Seconds,0) select @Elapsed = Cast(@Hour as Varchar) + '':'' + Cast(@Minute as Varchar) + '':'' + Cast(@Seconds as Varchar) Return (@Elapsed) End' )
-
==============================
12.
declare @dt1 datetime='2012/06/13 08:11:12', @dt2 datetime='2012/06/12 02:11:12' select CAST((@dt2-@dt1) as time(0))
-
==============================
13.인쇄 DATEDIFF (초 '2010-01-22 15 : 29 : 55.090', '2010-01-22 15 : 30 : 09.153')
인쇄 DATEDIFF (초 '2010-01-22 15 : 29 : 55.090', '2010-01-22 15 : 30 : 09.153')
-
==============================
14.
select datediff(millisecond,'2010-01-22 15:29:55.090','2010-01-22 15:30:09.153') / 1000.0 as Secs result: Secs 14.063
그냥 내가 그것을 말할 줄 알았는데.
-
==============================
15.FUNCTION의 getDateDiffHours을 작성 (AS @fdate 날짜가 날짜 등 있는데, TDate @) RETURNS의 VARCHAR (50) 같이 BEGIN DECLARE의 @cnt의 INT DECLARE의 @cntDate의 날짜 DECLARE의 @dayDiff의 INT DECLARE @dayDiffWk의 INT DECLARE @hrsDiff의 소수 (18)
FUNCTION의 getDateDiffHours을 작성 (AS @fdate 날짜가 날짜 등 있는데, TDate @) RETURNS의 VARCHAR (50) 같이 BEGIN DECLARE의 @cnt의 INT DECLARE의 @cntDate의 날짜 DECLARE의 @dayDiff의 INT DECLARE @dayDiffWk의 INT DECLARE @hrsDiff의 소수 (18)
DECLARE @markerFDate datetime DECLARE @markerTDate datetime DECLARE @fTime int DECLARE @tTime int DECLARE @nfTime varchar(8) DECLARE @ntTime varchar(8) DECLARE @nfdate datetime DECLARE @ntdate datetime ------------------------------------- --DECLARE @fdate datetime --DECLARE @tdate datetime --SET @fdate = '2005-04-18 00:00:00.000' --SET @tdate = '2005-08-26 15:06:07.030' ------------------------------------- DECLARE @tempdate datetime --setting weekends SET @fdate = dbo.getVDate(@fdate) SET @tdate = dbo.getVDate(@tdate) --RETURN @fdate SET @fTime = datepart(hh,@fdate) SET @tTime = datepart(hh,@tdate) --RETURN @fTime if datediff(hour,@fdate, @tdate) <= 9 RETURN(convert(varchar(50),0) + ' Days ' + convert(varchar(50),datediff(hour,@fdate, @tdate))) + ' Hours' else --setting working hours SET @nfTime = dbo.getV00(convert(varchar(2),datepart(hh,@fdate))) + ':' +dbo.getV00(convert(varchar(2),datepart(mi,@fdate))) + ':'+ dbo.getV00(convert(varchar(2),datepart(ss,@fdate))) SET @ntTime = dbo.getV00(convert(varchar(2),datepart(hh,@tdate))) + ':' +dbo.getV00(convert(varchar(2),datepart(mi,@tdate))) + ':'+ dbo.getV00(convert(varchar(2),datepart(ss,@tdate))) IF @fTime > 17 begin set @nfTime = '17:00:00' end else begin IF @fTime < 8 set @nfTime = '08:00:00' end IF @tTime > 17 begin set @ntTime = '17:00:00' end else begin IF @tTime < 8 set @ntTime = '08:00:00' end -- used for working out whole days SET @nfdate = dateadd(day,1,@fdate) SET @ntdate = @tdate SET @nfdate = convert(varchar,datepart(yyyy,@nfdate)) + '-' + convert(varchar,datepart(mm,@nfdate)) + '-' + convert(varchar,datepart(dd,@nfdate)) SET @ntdate = convert(varchar,datepart(yyyy,@ntdate)) + '-' + convert(varchar,datepart(mm,@ntdate)) + '-' + convert(varchar,datepart(dd,@ntdate)) SET @cnt = 0 SET @dayDiff = 0 SET @cntDate = @nfdate SET @dayDiffWk = convert(decimal(18,2),@ntdate-@nfdate) --select @nfdate,@ntdate WHILE @cnt < @dayDiffWk BEGIN IF (NOT DATENAME(dw, @cntDate) = 'Saturday') AND (NOT DATENAME(dw, @cntDate) = 'Sunday') BEGIN SET @dayDiff = @dayDiff + 1 END SET @cntDate = dateadd(day,1,@cntDate) SET @cnt = @cnt + 1 END --SET @dayDiff = convert(decimal(18,2),@ntdate-@nfdate) --datediff(day,@nfdate,@ntdate) --SELECT @dayDiff set @fdate = convert(varchar,datepart(yyyy,@fdate)) + '-' + convert(varchar,datepart(mm,@fdate)) + '-' + convert(varchar,datepart(dd,@fdate)) + ' ' + @nfTime set @tdate = convert(varchar,datepart(yyyy,@tdate)) + '-' + convert(varchar,datepart(mm,@tdate)) + '-' + convert(varchar,datepart(dd,@tdate)) + ' ' + @ntTime set @markerFDate = convert(varchar,datepart(yyyy,@fdate)) + '-' + convert(varchar,datepart(mm,@fdate)) + '-' + convert(varchar,datepart(dd,@fdate)) + ' ' + '17:00:00' set @markerTDate = convert(varchar,datepart(yyyy,@tdate)) + '-' + convert(varchar,datepart(mm,@tdate)) + '-' + convert(varchar,datepart(dd,@tdate)) + ' ' + '08:00:00' --select @fdate,@tdate --select @markerFDate,@markerTDate set @hrsDiff = convert(decimal(18,2),datediff(hh,@fdate,@markerFDate)) --select @hrsDiff set @hrsDiff = @hrsDiff + convert(int,datediff(hh,@markerTDate,@tdate)) --select @fdate,@tdate IF convert(varchar,datepart(yyyy,@fdate)) + '-' + convert(varchar,datepart(mm,@fdate)) + '-' + convert(varchar,datepart(dd,@fdate)) = convert(varchar,datepart(yyyy,@tdate)) + '-' + convert(varchar,datepart(mm,@tdate)) + '-' + convert(varchar,datepart(dd,@tdate)) BEGIN --SET @hrsDiff = @hrsDiff - 9 Set @hrsdiff = datediff(hour,@fdate,@tdate) END --select FLOOR((@hrsDiff / 9)) IF (@hrsDiff / 9) > 0 BEGIN SET @dayDiff = @dayDiff + FLOOR(@hrsDiff / 9) SET @hrsDiff = @hrsDiff - FLOOR(@hrsDiff / 9)*9 END --select convert(varchar(50),@dayDiff) + ' Days ' + convert(varchar(50),@hrsDiff) + ' Hours' RETURN(convert(varchar(50),@dayDiff) + ' Days ' + convert(varchar(50),@hrsDiff)) + ' Hours'
종료
-
==============================
16.솔-1 :
솔-1 :
select StartTime , EndTime , CONVERT(NVARCHAR,(EndTime-StartTime), 108) as TimeDiff from [YourTable]
일-2 :
select StartTime , EndTime , DATEDIFF(hh, StartTime, EndTime) , DATEDIFF(mi, StartTime, EndTime) % 60 from [YourTable]
솔-3 :
select DATEPART(hour,[EndTime]-[StartTime]) , DATEPART(minute,[EndTime]-[StartTime]) from [YourTable]
날짜 부분은 잘 작동
-
==============================
17.두 날짜 사이의 날짜 차이를 찾기 위해 트릭을 아래에 확인하시기 바랍니다
두 날짜 사이의 날짜 차이를 찾기 위해 트릭을 아래에 확인하시기 바랍니다
DATEDIFF(DAY,ordr.DocDate,RDR1.U_ProgDate) datedifff
여기서 당신은 당신이 일 또는 월 또는 연도 또는 시간의 차이를 원하는대로 귀하의 요구 사항에 따라 변경할 수 있습니다.
-
==============================
18.MM : SS DD에 대한이 사용 :
MM : SS DD에 대한이 사용 :
SELECT CONVERT(VARCHAR(max), Datediff(dd, '2019-08-14 03:16:51.360', '2019-08-15 05:45:37.610')) + ':' + CONVERT(CHAR(8), Dateadd(s, Datediff(s, '2019-08-14 03:16:51.360', '2019-08-15 05:45:37.610'), '1900-1-1'), 8)
-
==============================
19.온라인에 참조 DateDiff를 확인하십시오.
온라인에 참조 DateDiff를 확인하십시오.
-
==============================
20.나이 완벽하게 작동을 위해 변환 (VARCHAR (8) DATEADD (SECOND, DATEDIFF (SECOND, LogInTime, LogOutTime), 0), 114)
나이 완벽하게 작동을 위해 변환 (VARCHAR (8) DATEADD (SECOND, DATEDIFF (SECOND, LogInTime, LogOutTime), 0), 114)
그리고 출력은 HH : MM : SS 내 경우에 정확하게 표시됩니다.
from https://stackoverflow.com/questions/2116540/difference-of-two-date-time-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하나 개의 쿼리로 여러 행을 업데이트? (0) | 2020.05.21 |
---|---|
[SQL] SQLite는 주문 Date1530019888000 (0) | 2020.05.21 |
[SQL] 어떻게 2008는 SQL Server를 사용하여 테이블에서 최고 1,000 행을 삭제하려면? (0) | 2020.05.20 |
[SQL] SQL 서버에 대한 string_agg 2017 사전 (0) | 2020.05.20 |
[SQL] MySQL의에서 다음 달의 첫 번째와 마지막 날짜를 가져 오기 (0) | 2020.05.20 |