datetime2(Transact-SQL)
24시간제 기준의 시간과 결합된 날짜를 정의합니다. datetime2는 더 큰 날짜 범위, 더 많은 기본 소수 자릿수, 선택 항목인 사용자 지정 전체 자릿수를 갖는 기존 datetime 형식의 확장으로 볼 수 있습니다.
적용 대상: SQL Server(SQL Server 2008 - 현재 버전), Windows Azure SQL 데이터베이스(최초 릴리스 - 현재 릴리스) |
datetime2 설명
속성 |
값 |
---|---|
구문 |
datetime2 [ (fractional seconds precision) ] |
사용법 |
DECLARE @MyDatetime2 datetime2(7) CREATE TABLE Table1 ( Column1 datetime2(7) ) |
기본 문자열 리터럴 형식 (하위 클라이언트에 대해 사용됨) |
YYYY-MM-DD hh:mm:ss[.소수 자릿수 초] 자세한 내용은 뒷부분에 나오는 "하위 클라이언트에 대한 이전 버전과의 호환성" 섹션을 참조하십시오. |
날짜 범위 |
0001-01-01부터 9999-12-31까지 서기 1년부터 1월 1일부터 9999년 12월 31일까지 |
시간 범위 |
00:00:00부터 23:59:59.9999999까지 |
표준 시간대 오프셋 범위 |
없음 |
요소 범위 |
YYYY는 0001에서 9999 사이에 속하는 4자리 숫자로, 연도를 나타냅니다. MM은 01에서 12 사이에 속하는 두 자리 숫자로, 지정된 연도의 월을 나타냅니다. DD는 월에 따라 01에서 31 사이에 속하는 두 자리 숫자로, 특정 월의 일을 나타냅니다. hh는 00에서 23 사이에 속하는 두 자리 숫자로, 시간을 나타냅니다. Mm은 00에서 59 사이에 속하는 두 자리 숫자로, 분을 나타냅니다. ss는 00에서 59 사이에 속하는 두 자리 숫자로, 초를 나타냅니다. n*은 0에서 9999999 사이에 속하는 0 ~ 7 자리의 숫자로, 소수 자릿수 초를 나타냅니다. |
문자 길이 |
최소 19자리(YYYY-MM-DD hh:mm:ss )부터 최대 27자리(YYYY-MM-DD hh:mm:ss.0000000)까지 |
전체 자릿수, 소수 자릿수 |
0 ~ 7자리, 정확도 100ns. 기본 전체 자릿수는 7자리입니다. |
저장소 크기 |
전체 자릿수가 3 미만인 경우 6바이트, 3 및 4인 경우 7바이트, 기타 모든 전체 자릿수의 경우 8바이트가 필요합니다. |
정확도 |
100나노초 |
기본값 |
1900-01-01 00:00:00 |
달력 |
일반 달력 |
사용자 정의 초 소수 부분 자릿수 |
예 |
표준 시간대 오프셋 인식 및 유지 |
아니요 |
일광 절약 시간제 인식 |
아니요 |
데이터 형식 메타데이터의 경우 sys.systypes(Transact-SQL) 또는 TYPEPROPERTY(Transact-SQL)를 참조하십시오. 일부 날짜 및 시간 데이터 형식의 경우 전체 자릿수와 소수 자릿수는 변할 수 있습니다. 열에 대한 전체 자릿수와 소수 자릿수를 얻으려면 COLUMNPROPERTY(Transact-SQL), COL_LENGTH(Transact-SQL) 또는 sys.columns(Transact-SQL)를 참조하십시오.
datetime2에 대해 지원되는 문자열 리터럴 형식
다음 표에는 datetime2에 대해 지원되는 ISO 8601 및 ODBC 문자열 리터럴 형식이 나와 있습니다. datetime2의 날짜 및 시간 부분에 대한 영문자, 숫자, 시간 및 구분되지 않은 형식에 대한 내용은 date(Transact-SQL) 및 time(Transact-SQL)을 참조하십시오.
ISO 8601 |
설명 |
---|---|
YYYY-MM-DDThh:mm:ss[. nnnnnnn] YYYY-MM-DDThh:mm:ss[. nnnnnnn] |
이 형식은 SET LANGUAGE 및 SET DATEFORMAT 세션 로캘 설정의 영향을 받지 않습니다. T, 콜론(:) 및 마침표(.)는 문자열 리터럴에 포함됩니다(예: '2007-05-02T19:58:47.1234567'). |
ODBC |
설명 |
---|---|
{ ts 'yyyy-mm-dd hh:mm:ss[.소수 자릿수 초]' } |
ODBC API 사양: 소수 자릿수 초를 나타내는 소수점 오른쪽 자릿수는 0에서 최대 7(100나노초)까지 지정할 수 있습니다. |
ANSI 및 ISO 8601 호환성
date와 time의 ANSI 및 ISO 8601 호환성은 datetime2에 적용됩니다.
하위 클라이언트에 대한 이전 버전과의 호환성
일부 하위 클라이언트는 time, date, datetime2 및 datetimeoffset 데이터 형식을 지원하지 않습니다. 다음 표에서는 상위 SQL Server 인스턴스와 하위 클라이언트 간 형식 매핑을 보여 줍니다.
SQL Server 데이터 형식 |
하위 클라이언트에 전달된 기본 문자열 리터럴 형식 |
하위 수준 ODBC |
하위 수준 OLEDB |
하위 수준 JDBC |
하위 수준 SQLCLIENT |
---|---|---|---|---|---|
time |
hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR 또는 SQL_VARCHAR |
DBTYPE_WSTR 또는 DBTYPE_STR |
Java.sql.String |
String 또는 SqString |
date |
YYYY-MM-DD |
SQL_WVARCHAR 또는 SQL_VARCHAR |
DBTYPE_WSTR 또는 DBTYPE_STR |
Java.sql.String |
String 또는 SqString |
datetime2 |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR 또는 SQL_VARCHAR |
DBTYPE_WSTR 또는 DBTYPE_STR |
Java.sql.String |
String 또는 SqString |
datetimeoffset |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR 또는 SQL_VARCHAR |
DBTYPE_WSTR 또는 DBTYPE_STR |
Java.sql.String |
String 또는 SqString |
Date 및 Time 데이터 변환
SQL Server에서 날짜 및 시간 데이터 형식을 변환할 때 날짜나 시간으로 인식되지 않는 값은 모두 무시됩니다. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하십시오.
datetime2 데이터 형식을 다른 날짜 및 시간 형식으로 변환
다음 표에서는 datetime2 데이터 형식을 다른 날짜/시간 데이터 형식으로 변환하면 어떤 일이 발생하는지를 설명합니다.
변환할 데이터 형식 |
변환 정보 |
---|---|
date |
년, 월, 일이 복사됩니다. 시간 구성 요소는 00:00:00.000으로 설정됩니다. 다음 코드에서는 date 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
time(n) |
시간 구성 요소가 복사되고 날짜 구성 요소는 '1900-01-01'로 설정됩니다. time(n) 값의 소수 자릿수가 세 자리보다 크면 값이 이에 맞게 잘립니다. 다음 예에서는 time(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
smalldatetime |
시, 분이 복사됩니다. 초 및 소수 자릿수 초는 0으로 설정됩니다. 다음 코드에서는 smalldatetime 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
datetimeoffset(n) |
날짜 및 시간 구성 요소가 복사됩니다. 표준 시간대는 잘립니다. datetimeoffset(n) 값의 소수 자릿수가 세 자리보다 크면 값이 잘립니다. 다음 예에서는 datetimeoffset(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
datetime2(n) |
날짜 및 시간이 복사됩니다. datetime2(n) 값의 소수 자릿수가 세 자리보다 크면 값이 잘립니다. 다음 예에서는 datetime2(4) 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
문자열 리터럴을 datetime2로 변환
문자열에 포함된 모든 부분의 형식이 올바른 경우 문자열 리터럴에서 날짜/시간 유형으로 변환할 수 있습니다. 그렇지 않으면 런타임 오류가 발생합니다. 날짜/시간 유형에서 문자열 리터럴로의 암시적 변환 또는 명시적 변환에 스타일을 지정하지 않은 경우 현재 세션의 기본 형식이 지정됩니다. 다음 표에서는 문자열 리터럴을 datetime2 데이터 형식으로 변환하는 규칙을 보여 줍니다.
입력 문자열 리터럴 |
datetime2(n) |
---|---|
ODBC DATE |
ODBC 문자열 리터럴은 datetime 데이터 형식으로 매핑됩니다. ODBC DATETIME 리터럴에서 datetime2 형식으로 할당하면 변환 규칙으로 정의된 대로 datetime과 이러한 형식 간에 암시적 변환이 발생합니다. |
ODBC TIME |
이전 ODBC DATE 규칙을 참조하십시오. |
ODBC DATETIME |
이전 ODBC DATE 규칙을 참조하십시오. |
DATE만 |
TIME 부분의 기본값은 00:00:00입니다. |
TIME만 |
DATE 부분의 기본값은 1900-1-1입니다. |
TIMEZONE만 |
기본값이 제공됩니다. |
DATE+TIME |
중요하지 않음 |
DATE+TIMEZONE |
허용되지 않습니다. |
TIME + TIMEZONE |
DATE 부분의 기본값은 1900-1-1입니다. TIMEZONE 입력은 무시됩니다. |
DATE+TIME+TIMEZONE |
로컬 DATETIME이 사용됩니다. |
예
다음 예에서는 문자열을 각각 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 |