SQL에서 datediff 함수를 사용하는 방법은 무엇입니까? (자세한 코드 설명)

藏色散人
풀어 주다: 2019-03-26 13:46:05
원래의
33879명이 탐색했습니다.

SQL Server에서는 T-SQL DATEDIFF() 함수를 사용하여 두 날짜의 차이를 반환할 수 있습니다. 이는 시간, 날짜, smalldatetime, datetime, datetime2 또는 datetimeoffset 값으로 구문 분석할 수 있는 모든 표현식에서 작동합니다. 따라서 두 시간의 차이도 얻을 수 있습니다.

SQL에서 datediff 함수를 사용하는 방법은 무엇입니까? (자세한 코드 설명)

이 문서에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!