[sql] SQL Server에서 두 날짜 시간의 차이

datetimeSQL Server에서 두 가지 차이점을 취하는 방법이 있습니까?

예를 들어, 내 날짜는

  1. 2010-01-22 15:29:55.090
  2. 2010-01-22 15:30:09.153

따라서 결과는 14.063 seconds.



답변

DateDiff에 대해 추가 할주의 사항은 단위로 지정한 경계를 통과 한 횟수를 계산하므로 정확한 시간 범위를 찾는 경우 문제가 발생할 수 있습니다. 예 :

select datediff (m, '20100131', '20100201')

1 월에서 2 월까지 경계를 넘었 기 때문에 1의 답을 제공합니다. 따라서 범위가 2 일이더라도 datediff는 1의 값을 반환합니다. 1 개의 날짜 경계를 넘었습니다.

select datediff(mi, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')

1의 값을 다시 부여하면 분 경계를 한 번 통과 했으므로 약 14 초이지만 Minutes를 단위로 사용하면 1 분으로 반환됩니다.


답변

SELECT DATEDIFF (MyUnits, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')

MSDN 에서 DATEDIFF를 기반으로 “MyUnits”로 대체


답변

SELECT  DATEDIFF(day, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')

day차이를 얻고 싶은 다른 단위 (예 second: minute등)로 교체하십시오 .


답변

매우 유용 할 수있는 MS SQL Server의 네 가지 중요한 기능을 언급 할 수 있습니다.

1) DATEDIFF () 함수 는 두 날짜 간의 차이를 계산합니다. 결과 는 첫 번째 매개 변수 ( datepart ) 에 지정된 ” 년 분기 월 요일 요일 주시 분 초 밀리 초 마이크로 초 나노초 “일 있습니다.

select datediff(day,'1997-10-07','2011-09-11')

2) GETDATE () 함수를 사용하여 실제 시간을 얻고 일부 날짜와 실제 날짜의 차이를 계산할 수 있습니다.

select datediff(day,'1997-10-07', getdate() )

3) 또 다른 중요한 함수는 DATEADD () 이며, datediff 의 동일한 datepart 를 사용하여 datetime의 일부 값을 변환하는 데 사용 되며 하나의 기본 날짜에 더하거나 (양수 값 사용) 빼거나 (음수 값 사용) 할 수 있습니다.

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 콜드 (cold)는 초 단위로 계산되며이 네 가지 함수를 혼합 한 흥미로운 결과 는 두 날짜 사이 의 형식화 된 차이 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)

… 결과는 00:10:38입니다 (638s = 600s + 38s = 10 분 38 초).

또 다른 예:

select distinct convert(char(8),dateadd(s,datediff(s, CRDATE , GETDATE() ),'1900-1-1'),8) from sysobjects order by 1


답변

나는 이런 식으로 시도했고 효과가 있었다. 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


답변

좋아요, 우리 모두는 대답이 포함된다는 것을 압니다 DATEDIFF(). 그러나 그것은 당신이 원하는 결과의 절반만을 제공합니다. 두 DATETIME값 사이의 분과 초로 사람이 읽을 수있는 형식으로 결과를 얻으려면 어떻게해야 합니까?

그만큼 CONVERT(), DATEADD()물론 DATEDIFF()기능은 클라이언트가 숫자 대신 사용할 수있는 더 쉽게 읽을 수있는 결과를 위해 완벽하다.

CONVERT(varchar(5), DATEADD(minute, DATEDIFF(MINUTE, date1, date2), 0), 114)

이것은 당신에게 다음과 같은 것을 줄 것입니다.

HH : MM

더 많은 정밀도를 원하면 VARCHAR().

CONVERT(varchar(12), DATEADD(minute, DATEDIFF(MINUTE, date1, date2), 0), 114)

HH : MM.SS.MS


답변

SQL Server에서 내부적으로 날짜는 2 개의 정수로 저장됩니다. 첫 번째 정수는 기준 날짜 (1900/01/01) 전후의 날짜 수입니다. 두 번째 정수는 자정 이후의 클록 틱 수를 저장하며 각 틱은 1/300 초입니다.

여기에 더 많은 정보

이 때문에 날짜를 비교하는 가장 간단한 방법은 단순히 날짜를 빼는 것입니다. 이것은 내 사용 사례의 90 %를 처리합니다. 예 :

select date1, date2, date2 - date1 as DifferenceInDays
from MyTable
...

일 이외의 단위로 답변이 필요한 경우 DateDiff 를 사용 합니다.