GETUTCDATE ()-2 vs DATEADD (d, -2, GETUTCDATE ())


13

다음 두 가지 방법의 차이점이 무엇인지 궁금합니다.

 GETUTCDATE()-2  

  DATEADD(d,-2,GETUTCDATE())

사용하는 DATEADD것이 올바른 방법이라고 생각하지만 그 이유가 궁금합니다.

답변:


14

실제 차이는 없지만 DATETIME2값이나 DATETIME2값 을 반환하는 함수를 사용하기 시작 하면 오류가 발생합니다.

SELECT SYSDATETIME() - 1 AS [Incompatible]

메시지 206, 수준 16, 상태 2, 줄 17 피연산자 유형 충돌 : datetime2가 int와 호환되지 않습니다

이를 위해서는 날짜 계산 기능을 사용해야합니다.

SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]

Aaron Bertrand는이 문제에 대해 Bad Habits to Kick 시리즈 에서 간단히 설명합니다 .


8

다른 답변 중 하나의 주장과 달리 두 옵션은 공식적 으로 SQL Server에서 지원 하고 문서화 합니다 . 정의 되지 않은 동작 datetime - number아닙니다 .

큰 장점

DATEADD(d, -2, GETUTCDATE())

자체 문서화 라는 사실입니다 . 그 목적은 즉시 명백합니다.

GETUTCDATE() - 2반면에, datetime - number조작 의 정의를 아는 독자에게 의존 합니다. 예, 현재 관용적 인 T-SQL 일 수 있지만 이것이 더 이상 지원되지 않는다는 사실은 datetime2차세대 SQL Server 개발자가 더 이상 익숙하지 않을 수 있음 을 의미합니다.


그것은 더 여기에 명시 적으로 언급 한 것 : 산술 연산자 (Transact-SQL)를 참조하십시오 " 플러스 (+)와 마이너스 (-) 연산자도에 산술 연산을 수행하는 데 사용할 수 날짜smalldatetime으로 값. "
ypercubeᵀᴹ

@ ypercubeᵀᴹ :-( 빼기) (Transact-SQL) 의 첫 번째 줄은 단위 (일)보다 훨씬 더 명확합니다. "두 숫자를 뺍니다 (산술 빼기 연산자). 날짜에서 숫자를 뺄 수도 있습니다 . . "
Heinzi

네, 봤어요 그리고 나중에 "날짜, 시간, 날짜 시간 2 또는 날짜 시간 오프셋 데이터 형식과 함께 사용할 수 없습니다." 따라서 첫 번째 문장에서 "날짜"는 금지 된 것을 제외한 모든 날짜 / 시간 유형을 의미합니다 (따라서 datetime 및 smalldatetime 만 기본적으로 date추가 된 2008 (?) 버전 이전의 날짜 시간 유형 ). 조금 지저분합니다.
ypercubeᵀᴹ

아마도 그것은 당신이 당신의 대답에 추가 할 수있는 또 다른 것입니다. 이 연산자가 새로운 유형을 지원하지 않는다는 사실은 이전 버전과의 호환성을 위해서만 유지되었음을 나타냅니다.
ypercubeᵀᴹ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.