집 >데이터 베이스 >MySQL 튜토리얼 >SQL에서 datediff 함수를 사용하는 방법은 무엇입니까? (자세한 코드 설명)
SQL Server에서는 T-SQL DATEDIFF() 함수를 사용하여 두 날짜의 차이를 반환할 수 있습니다. 이는 시간, 날짜, smalldatetime, datetime, datetime2 또는 datetimeoffset 값으로 구문 분석할 수 있는 모든 표현식에서 작동합니다. 따라서 두 시간의 차이도 얻을 수 있습니다.
이 문서에서는 SQL Server의 DATEDIFF() 함수 사용 예를 제공합니다.
DATEDIFF() 함수 구문은 다음과 같습니다.
DATEDIFF ( datepart , startdate , enddate )
여기서 datepart는 비교하려는 날짜의 일부입니다. startdate는 첫 번째 날짜이고 enddate는 종료 날짜입니다.
작동 방식은 종료 날짜에서 시작 날짜를 빼는 것입니다.
예제 1
다음은 두 날짜 사이의 일수를 계산할 수 있는 기본 예입니다.
SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;
결과:
+----------+ | Result | |----------| | 365 | +----------+
예제 2
다음은 두 개의 변수를 선언한 또 다른 예입니다. 두 개의 다른 날짜를 할당했습니다(저는 DATEADD()를 사용하여 첫 번째 날짜에 1년을 추가했습니다). 그런 다음 DATEDIFF()를 사용하여 해당 날짜의 개별 날짜 부분을 반환합니다.
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 1, @date1); SELECT DATEDIFF( year, @date1, @date2 ) AS Years, DATEDIFF( quarter, @date1, @date2 ) AS Quarters, DATEDIFF( month, @date1, @date2 ) AS Months, DATEDIFF( week, @date1, @date2 ) AS Weeks, DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear, DATEDIFF( day, @date1, @date2 ) AS Days;
결과:
+---------+------------+----------+---------+-------------+--------+ | Years | Quarters | Months | Weeks | DayOfYear | Days | |---------+------------+----------+---------+-------------+--------| | 1 | 4 | 12 | 53 | 366 | 366 | +---------+------------+----------+---------+-------------+--------+
예 3
앞서 언급했듯이 날짜 사이의 시간 부분을 반환할 수도 있습니다. 다음은 날짜/시간 값 사이의 시, 분, 초를 반환하는 예입니다.
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1); SELECT DATEDIFF( hour, @date1, @date2 ) AS Hours, DATEDIFF( minute, @date1, @date2 ) AS Minutes, DATEDIFF( second, @date1, @date2 ) AS Seconds;
결과:
+---------+-----------+-----------+ | Hours | Minutes | Seconds | |---------+-----------+-----------| | 1 | 60 | 3600 | +---------+-----------+-----------+
예 4
다음은 두 날짜/시간 값 사이의 밀리초, 마이크로초를 가져오는 예입니다. 초의 예 및 나노초:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
결과:
+----------------+----------------+---------------+ | Milliseconds | Microseconds | Nanoseconds | |----------------+----------------+---------------| | 1 | 1000 | 1000000 | +----------------+----------------+---------------+
예 5 - 오류!
100년 후에 나노초 수를 반환하는 것과 같은 극단적인 작업을 수행하려고 하면 오류가 발생합니다. 이는 DATEDIFF()가 int 값을 반환하고 100년 동안 int 데이터 유형이 처리할 수 있는 것보다 더 많은 나노초가 있기 때문입니다.
이것을 시도하면 어떻게 될까요?
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 100, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
결과:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
물론 100년이 몇 나노초인지 알아내야 한다면 DATEDIFF_BIG() 함수를 사용할 수 있습니다. 이 함수는 부호 있는 bigint 데이터 유형을 반환하므로 DATEDIFF()보다 더 큰 값을 반환할 수 있습니다.
관련 권장 사항: "MySQL 튜토리얼"
위 내용은 SQL에서 datediff 함수를 사용하는 방법은 무엇입니까? (자세한 코드 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!