datetime(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
24시간 시계를 기반으로 하는 소수 자릿수 초와 하루 중 시간과 결합되는 날짜를 정의합니다.
새 작업에 날짜/시간을 사용하지 않습니다. 대신 시간, 날짜, datetime2 및 datetimeoffset 데이터 형식을 사용합니다. 이러한 형식은 SQL Standard와 일치하며 이식성이 더 높습니다. time, datetime2 및 datetimeoffset 은 더 많은 초 정밀도를 제공합니다. datetimeoffset 은 전역적으로 배포된 애플리케이션에 대한 표준 시간대 지원을 제공합니다.
설명
속성 | 값 |
---|---|
Syntax | DATETIME |
사용법 | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
기본 문자열 리터럴 형식(하위 수준 클라이언트에 사용) | 해당 없음 |
날짜 범위 | 1753-01-01(1753년 1월 1일)~9999-12-31(9999년 12월 31일) |
시간 범위 | 00:00:00부터 23:59:59.997까지 |
표준 시간대 오프셋 범위 | None |
요소 범위 | yyyy 는 연도를 나타내는 4자리 숫자입니다 1753 9999 .MM 는 지정된 연도의 월을 나타내는 두 자리 숫자입니다 01 12 .dd 은 지정된 월의 요일을 나타내는 월에 따라 달라지는 01 31 두 자리 숫자입니다.HH 는 시간을 나타내는 두 자리 숫자입니다 00 23 .mm 은 분을 나타내는 두 자리 숫자입니다 00 59 .ss 는 두 번째 숫자를 나타내는 두 자리 숫자입니다 00 59 .n* 은 소수 자릿수 초를 나타내는 0~0 999 3자리 숫자입니다. |
문자 길이 | 최소 19자리부터 최대 23자리까지 |
스토리지 크기 | 8바이트 |
정확도(Accuracy) | 증분 또는 .003 .007 초 단위.000 로 반올림됨 |
기본값 | 1900-01-01 00:00:00 |
캘린더 | 그레고리오리언(전체 연도 포함) |
사용자 정의 소수 자릿수 초 정밀도 | 아니요 |
표준 시간대 오프셋 인식 및 보존 | 아니요 |
일광 절약 시간 인식 | 아니요 |
datetime에 대해 지원되는 문자열 리터럴 형식
다음 표에는 datetime에 대해 지원되는 문자열 리터럴 형식이 나와 있습니다. ODBC를 제외하고 datetime 문자열 리터럴은 작은따옴표('
예: 'string_literaL'
환경이 아닌 us_english
경우 문자열 리터럴은 유니코드 형식 N'string_literaL'
이어야 합니다.
숫자 형식
숫자 월이 지정된 날짜 데이터를 지정할 수 있습니다. 예를 들어 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개 날짜 중 하나로 해석할 수 있습니다. 4부로 구성된 연도는 연도로 해석됩니다.
날짜 형식 | 순서 |
---|---|
[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:997] |
14:30[:20.9] |
4am |
4 PM |
사전순 형식
전체 월 이름으로 지정된 월을 사용하여 날짜 데이터를 지정할 수 있습니다. 예를 들어 April
현재 언어로 지정된 월 약어 Apr
입니다. 쉼표는 선택 사항이며 대문자는 무시됩니다.
다음은 알파벳 날짜 형식 사용에 대한 몇 가지 지침입니다.
날짜 및 시간 데이터를 작은따옴표(
'
)로 묶습니다. 영어N''
이외의 언어의 경우 .대괄호로 묶인 문자는 선택 사항입니다.
연도의 마지막 두 자리만 지정하는 경우 두 자리 연도 구분 구성 옵션 값의 마지막 두 자리보다 작은 값은 구분 연도와 같은 세기에 있습니다. 이 옵션의 값보다 크거나 같은 값은 컷오프 연도 이전에 오는 세기에 있습니다. 예를 들어 두 자리 연도 구분선이
2050
(기본값)25
인 경우 로 해석되고2025
50
로1950
해석됩니다. 모호성을 피하려면 4자리 연도를 사용하세요.날짜가 누락된 경우 해당 월의 첫째 날이 제공됩니다.
월을
SET DATEFORMAT
사전순 형식으로 지정하면 세션 설정이 적용되지 않습니다.
사전순 |
---|
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] |
ISO 8601 형식
ISO 8601 형식을 사용하려면 형식, 콜론() 및 형식으로 표시된 마침표(:
.
)를 포함하여 T
형식의 각 요소를 지정해야 합니다.
대괄호는 초의 소수 구성 요소가 선택 사항임을 나타냅니다. 시간 구성 요소는 24시간 형식으로 지정됩니다. 날짜T
/시간 값의 시간 부분의 시작을 나타냅니다.
ISO 8601 형식을 사용할 때의 이점은 명확한 사양의 국제 표준이라는 점입니다. 또한 이 형식은 또는 SET LANGUAGE 설정의 SET DATEFORMAT
영향을 받지 않습니다.
예:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
비포장 형식
이 형식은 날짜 구분 기호가 없다는 점을 제외하고 ISO 8601 형식과 비슷합니다.
비포장 |
---|
yyyyMMdd HH:mm:ss[.mmm] |
ODBC 형식
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>
는 이스케이프 시퀀스의 형식을 지정합니다. 타임스탬프에는 다음 세<literal_type>
가지 지정자가 있습니다.d
= 날짜만t
= 시간 전용ts
= 타임스탬프(시간 + 날짜)
<constant_value>
는 이스케이프 시퀀스의 값입니다.<constant_value>
각각<literal_type>
에 대해 다음 형식을 따라야 합니다.d
:yyyy-MM-dd
t
:hh:mm:ss[.fff]
ts
:yyyy-MM-dd HH:mm:ss[.fff]
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
datetime 초 소수 부분 자릿수 반올림
datetime 값은 다음 예제와 .000
같이 증분 또는 .003
.007
초 단위로 반올림됩니다.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
결과 집합은 다음과 같습니다.
사용자가 지정한 값 | 시스템 저장 값 |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
ANSI 및 ISO 8601 규정 준수
datetime 은 ANSI 또는 ISO 8601을 준수하지 않습니다.
날짜 및 시간 데이터 변환
날짜 및 시간 데이터 형식으로 변환할 때 데이터베이스 엔진 날짜 또는 시간으로 인식할 수 없는 모든 값을 거부합니다. 날짜 및 시간 데이터와 함께 함수 및 CONVERT
함수를 사용하는 CAST
방법에 대한 자세한 내용은 CAST 및 CONVERT를 참조하세요.
다른 날짜 및 시간 형식을 날짜/시간 데이터 형식으로 변환
이 섹션에서는 다른 날짜 및 시간 데이터 형식을 datetime 데이터 형식으로 변환할 때 발생하는 상황에 대해 설명합니다.
변환이 날짜부터인 경우 연도, 월 및 날짜가 복사됩니다. 시간 구성 요소가 .로 00:00:00.000
설정됩니다. 다음 코드는 값을 값 DATETIME
으로 변환한 DATE
결과를 보여줍니다.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
결과 집합은 다음과 같습니다.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
이전 예제에서는 지역별 날짜 형식(MM-DD-YY
)을 사용합니다.
DECLARE @date DATE = '12-21-16';
해당 지역의 형식과 일치하도록 예제를 업데이트해야 합니다.
ISO 8601 호환 날짜 형식(yyyy-MM-dd
)으로 예제를 완료할 수도 있습니다. 예시:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
변환이 time(n)에서 이면 시간 구성 요소가 복사되고 날짜 구성 요소가 .로 1900-01-01
설정됩니다. 시간(n) 값의 소수 자릿수가 3자리보다 크면 값이 잘립니다. 다음 예제에서는 값을 값 DATETIME
으로 변환한 TIME(4)
결과를 보여줍니다.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
결과 집합은 다음과 같습니다.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
smalldatetime에서 변환되면 시간 및 분이 복사됩니다. 초 및 소수 자릿수 초는 .로 0
설정됩니다. 다음 코드는 값을 값 DATETIME
으로 변환한 SMALLDATETIME
결과를 보여줍니다.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
결과 집합은 다음과 같습니다.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
datetimeoffset(n)에서 변환되면 날짜 및 시간 구성 요소가 복사됩니다. 표준 시간대가 잘립니다. datetimeoffset(n) 값의 소수 자릿수가 3자리보다 크면 값이 잘립니다. 다음 예제에서는 값을 값 DATETIME
으로 변환한 DATETIMEOFFSET(4)
결과를 보여줍니다.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
결과 집합은 다음과 같습니다.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
datetime2(n)에서 변환되면 날짜와 시간이 복사됩니다. datetime2(n) 값의 소수 자릿수가 세 자리보다 크면 값이 잘립니다. 다음 예제에서는 값을 값 DATETIME
으로 변환한 DATETIME2(4)
결과를 보여줍니다.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
결과 집합은 다음과 같습니다.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
예제
다음 예제에서는 각 날짜 및 시간 데이터 형식에 문자열을 캐스팅한 결과를 비교합니다.
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
결과 집합은 다음과 같습니다.
데이터 형식 | 출력 |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |