다음을 통해 공유


datetime(Transact-SQL)

소수 자릿수 초가 있는 24시간제 기준의 시간과 결합된 날짜를 정의합니다.

[!참고]

새 작업에는 time, date, datetime2 및 datetimeoffset 데이터 형식을 사용하십시오. 이러한 데이터 형식은 SQL 표준에 맞는 형식으로, 이식성이 높습니다. time, datetime2 및 datetimeoffset을 사용하면 초의 정밀도가 높아지며, 전 세계에 배포되는 응용 프로그램의 경우 datetimeoffset을 사용하면 표준 시간대가 지원됩니다.

datetime 설명

속성

구문

datetime

사용법

DECLARE @MyDatetime datetime

CREATE TABLE Table1 ( Column1 datetime )

기본 문자열 리터럴 형식

(하위 클라이언트에 대해 사용됨)

해당 사항 없음

날짜 범위

1753년 1월 1일부터 9999년 12월 31일까지

시간 범위

00:00:00부터 23:59:59.997까지

표준 시간대 오프셋 범위

없음

요소 범위

YYYY는 1753부터 9999까지의 4자리 숫자로, 연도를 나타냅니다.

MM은 01에서 12 사이에 속하는 두 자리 숫자로, 지정한 연도의 월을 나타냅니다.

DD는 월에 따라 01에서 31 사이에 속하는 두 자리 숫자로, 지정한 월의 일을 나타냅니다.

hh는 00에서 23 사이에 속하는 두 자리 숫자로, 시를 나타냅니다.

mm은 00에서 59 사이에 속하는 두 자리 숫자로, 분을 나타냅니다.

ss는 00에서 59 사이에 속하는 두 자리 숫자로, 초를 나타냅니다.

n*은 0에서 999 사이에 속하는 세 자리 숫자로, 소수 자릿수 초를 나타냅니다.

문자 길이

최소 19자리부터 최대 23자리까지

저장소 크기

8바이트

정확도

.000, .003 또는 .007초 단위로 반올림됩니다.

기본값

1900-01-01 00:00:00

달력

일반 달력(전체 연도 범위를 포함하지는 않음)

사용자 정의 초 소수 부분 자릿수

아니요

표준 시간대 오프셋 인식 및 유지

아니요

일광 절약 시간제 인식

아니요

datetime에 대해 지원되는 문자열 리터럴 형식

다음 표에는 datetime에 대해 지원되는 문자열 리터럴 형식이 나와 있습니다. ODBC를 제외하고 datetime 문자열 리터럴은 작은따옴표(')로 묶입니다(예: 'string_literaL'). us_english 환경이 아닌 경우 문자열 리터럴은 N'string_literaL' 형식이어야 합니다.

숫자

설명

날짜 형식:

[0]4/15/[19]96 -- (mdy)

[0]4-15-[19]96 -- (mdy)

[0]4.15.[19]96 -- (mdy)

[0]4/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dmy)

15/[19]96/[0]4 -- (dym)

[19]96/15/[0]4 -- (ydm)

[19]96/[0]4/15 -- (ymd)

시간 형식:

14:30

14:30[:20:999]

14:30[:20.9]

4am

4 PM

지정된 숫자 월을 사용하여 날짜 데이터를 지정할 수 있습니다. 예를 들어 5/20/97은 1997년 5월 20일을 나타냅니다. 숫자 날짜 형식을 사용할 경우에는 문자열에 슬래시 기호(/), 하이픈(-) 또는 마침표(.)를 구분 기호로 사용하여 년, 월, 일을 지정합니다. 이 문자열은 다음과 같은 형식이어야 합니다.

  • number separator number separator number [time] [time]

언어를 us_english로 설정하면 기본 날짜 순서는 mdy(월, 일, 년)입니다. SET DATEFORMAT 문을 사용하여 날짜 순서를 변경할 수 있습니다.

SET DATEFORMAT 설정에 따라 날짜 값의 해석 방법이 결정됩니다. 순서가 설정과 다르면 값이 범위를 벗어나므로 날짜로 해석되지 않거나 잘못 해석됩니다. 예를 들어 12/10/08은 DATEFORMAT 설정에 따라 6가지 날짜 중 하나로 해석될 수 있습니다. 네 부분으로 된 연도는 년으로 해석됩니다.

알파벳

설명

Apr[il] [15][,] 1996

Apr[il] 15[,] [19]96

Apr[il] 1996 [15]

[15] Apr[il][,] 1996

15 Apr[il][,][19]96

15 [19]96 apr[il]

[15] 1996 apr[il]

1996 APR[IL] [15]

1996 [15] APR[IL]

전체 월 이름으로 지정된 월을 사용하여 날짜 데이터를 지정할 수 있습니다. 예를 들어 April 또는 현재 언어에서 정해진 월 약어(Apr)를 사용할 수 있습니다. 쉼표는 선택 사항이며 대문자는 무시됩니다.

다음은 알파벳 날짜 형식 사용에 대한 몇 가지 지침입니다.

  • 날짜 및 시간 데이터는 작은따옴표(')로 묶습니다. 영어 이외의 다른 언어에서는 N'을 사용합니다.

  • 대괄호로 묶인 문자는 선택 사항입니다.

  • 연도의 마지막 두 자리만 지정하는 경우 이 값이 two digit year cutoff 서버 구성 옵션 구성 구성 옵션 값의 마지막 두 자리보다 작으면 구분 연도와 같은 세기로 간주됩니다. 이 옵션 값보다 크거나 같은 값은 구분 연도 전의 세기로 간주됩니다. 예를 들어 two digit year cutoff가 2050(기본값)이면 25는 2025로 해석되고 50은 1950으로 해석됩니다. 모호성을 피하려면 4자리 연도를 사용하십시오.

  • 일이 생략된 경우 해당 월의 첫째 날이 사용됩니다.

월을 알파벳 형식으로 지정하면 SET DATEFORMAT 세션 설정이 적용되지 않습니다.

ISO 8601

설명

YYYY-MM-DDThh:mm:ss[.mmm]

YYYYMMDD[ hh:mm:ss[.mmm]]

예:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

ISO 8601 형식을 사용하려면 각 요소를 이 형식으로 지정해야 합니다. 여기에는 형식에 표시되는 T, 콜론(:), 마침표(.)도 포함됩니다.

대괄호는 초의 소수 구성 요소가 선택 사항임을 나타냅니다. 시간 구성 요소는 24시간 형식으로 지정됩니다.

T는 datetime 값의 시간 시작 부분을 나타냅니다.

ISO 8601 형식을 사용할 때의 이점은 이 형식이 명확한 사양을 가진 국제 표준이라는 점입니다. 또한 이 형식은 SET DATEFORMAT 또는 SET LANGUAGE 설정에 영향을 받지 않습니다.

구분되지 않음

설명

YYYYMMDD hh:mm:ss[.mmm]

ODBC

설명

{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }

{ t '13:33:41' }

ODBC API는 이스케이프 시퀀스를 정의하여 ODBC가 타임스탬프 데이터를 호출하는 날짜 및 시간 값을 나타냅니다. 이 ODBC 타임스탬프 형식은 Microsoft OLE DB provider for SQL Server에서 지원하는 OLE DB 언어 정의(DBGUID-SQL)에서도 지원됩니다. ADO, OLE DB 및 ODBC 기반 API를 사용하는 응용 프로그램에서는 이 ODBC 타임스탬프 형식을 사용하여 날짜 및 시간을 나타낼 수 있습니다.

ODBC 타임스탬프 이스케이프 시퀀스의 형식은 다음과 같습니다. { literal_type 'constant_value' }:

  • literal_type은 이스케이프 시퀀스의 유형을 지정합니다. 타임스탬프에는 다음과 같은 3개의 literal_type 지정자가 있습니다.

    • d = 날짜만

    • t = 시간만

    • ts = 타임스탬프(시간+날짜)

  • 'constant_value'는 이스케이프 시퀀스의 값입니다. constant_value는 각 literal_type에 대해 이러한 형식을 따라야 합니다.

    literal_type

    constant_value 형식

    d

    yyyy-mm-dd

    t

    hh:mm:ss[.fff]

    ts

    yyyy-mm-dd hh:mm:ss[.fff]

datetime 초 소수 부분 자릿수 반올림

다음 표에서와 같이 datetime 값은 .000, .003 또는 .007초 단위로 반올림됩니다.

사용자 지정 값

시스템 저장 값

01/01/98 23:59:59.999

1998-01-02 00:00:00.000

01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998

1998-01-01 23:59:59.997

01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994

1998-01-01 23:59:59.993

01/01/98 23:59:59.990

01/01/98 23:59:59.991

1998-01-01 23:59:59.990

ANSI 및 ISO 8601 호환성

datetime은 ANSI 또는 ISO 8601과 호환되지 않습니다.

Date 및 Time 데이터 변환

SQL Server에서 날짜 및 시간 데이터 형식을 변환할 때 날짜나 시간으로 인식되지 않는 값은 모두 무시됩니다. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하십시오.

datetime을 다른 날짜 및 시간 형식으로 변환

다음 표에서는 datetime 데이터 형식을 다른 날짜/시간 데이터 형식으로 변환하면 어떤 일이 발생하는지를 설명합니다.

변환할 데이터 형식

변환 정보

date

년, 월, 일이 복사됩니다. 시간 구성 요소는 00:00:00.000으로 설정됩니다.

다음 코드에서는 date 값을 datetime 값으로 변환한 결과를 보여 줍니다.

DECLARE @date date = '12-21-05';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime               @date
------------------------- ----------
--2005-12-21 00:00:00.000 2005-12-21

time(n)

시간 구성 요소가 복사되고 날짜 구성 요소는 '1900-01-01'로 설정됩니다. time(n) 값의 소수 자릿수가 세 자리보다 크면 값이 이에 맞게 잘립니다.

다음 예에서는 time(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.

DECLARE @time time(4) = '12:10:05.1237';
DECLARE @datetime datetime = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
--Result
--@datetime               @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1237
--
--(1 row(s) affected)

smalldatetime

시, 분이 복사됩니다. 초 및 소수 자릿수 초는 0으로 설정됩니다.

다음 코드에서는 smalldatetime 값을 datetime 값으로 변환한 결과를 보여 줍니다.

DECLARE @smalldatetime smalldatetime = '12-01-01 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

datetimeoffset(n)

날짜 및 시간 구성 요소가 복사됩니다. 표준 시간대는 잘립니다. datetimeoffset(n) 값의 소수 자릿수가 세 자리보다 크면 값이 잘립니다.

다음 예에서는 datetimeoffset(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime datetime = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime               @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +01:0
--
--(1 row(s) affected)

datetime2(n)

날짜 및 시간이 복사됩니다. datetime2(n) 값의 소수 자릿수가 세 자리보다 크면 값이 잘립니다.

다음 예에서는 datetime2(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime datetime = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
--Result
--@datetime               @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
--
--(1 row(s) affected)

다음 예에서는 문자열을 각각 date 및 time 데이터 형식으로 캐스팅한 결과를 비교합니다.

SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset';

결과 집합은 다음과 같습니다.

데이터 형식

출력

time

12:35:29. 1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

datetimeoffset

2007-05-08 12:35:29.1234567 +12:15

참고 항목

참조

CAST 및 CONVERT(Transact-SQL)