datetime2(Transact-SQL)datetime2 (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

24시간제 기준의 시간과 결합된 날짜를 정의합니다.Defines a date that is combined with a time of day that is based on 24-hour clock. datetime2는 더 큰 날짜 범위, 더 많은 기본 소수 자릿수, 선택 항목인 사용자 지정 전체 자릿수를 갖는 기존 datetime 형식의 확장으로 볼 수 있습니다.datetime2 can be considered as an extension of the existing datetime type that has a larger date range, a larger default fractional precision, and optional user-specified precision.

datetime2 설명datetime2 description

속성Property Value
구문Syntax datetime2 [ (초 소수 부분 자릿수) ]datetime2 [ (fractional seconds precision) ]
사용Usage DECLARE @MyDatetime2 datetime2(7)DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )CREATE TABLE Table1 ( Column1 datetime2(7) )
기본 문자열 리터럴 형식Default string literal format

(하위 클라이언트에 대해 사용됨)(used for down-level client)
YYYY-MM-DD hh:mm:ss[.소수 자릿수 초]YYYY-MM-DD hh:mm:ss[.fractional seconds]

자세한 내용은 뒷부분에 나오는 "하위 클라이언트에 대한 이전 버전과의 호환성" 섹션을 참조하세요.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
날짜 범위Date range 0001-01-01부터 31.12.99까지0001-01-01 through 9999-12-31

CE 1년 1월 1일부터 CE 9999년 12월 31일까지January 1,1 CE through December 31, 9999 CE
시간 범위Time range 00:00:00부터 23:59:59.9999999까지00:00:00 through 23:59:59.9999999
표준 시간대 오프셋 범위Time zone offset range 없음None
요소 범위Element ranges YYYY는 0001에서 9999 사이에 속하는 4자리 숫자로, 연도를 나타냅니다.YYYY is a four-digit number, ranging from 0001 through 9999, that represents a year.

MM은 01에서 12 사이에 속하는 두 자리 숫자로, 지정된 연도의 월을 나타냅니다.MM is a two-digit number, ranging from 01 to 12, that represents a month in the specified year.

DD는 월에 따라 01에서 31 사이에 속하는 두 자리 숫자로, 특정 월의 일을 나타냅니다.DD is a two-digit number, ranging from 01 to 31 depending on the month, that represents a day of the specified month.

hh는 00에서 23 사이에 속하는 두 자리 숫자로, 시간을 나타냅니다.hh is a two-digit number, ranging from 00 to 23, that represents the hour.

Mm은 00에서 59 사이에 속하는 두 자리 숫자로, 분을 나타냅니다.mm is a two-digit number, ranging from 00 to 59, that represents the minute.

ss는 00에서 59 사이에 속하는 두 자리 숫자로, 초를 나타냅니다.ss is a two-digit number, ranging from 00 to 59, that represents the second.

n*은 0에서 9999999 사이에 속하는 0 ~ 7 자리의 숫자로, 소수 자릿수 초를 나타냅니다.n* is a zero- to seven-digit number from 0 to 9999999 that represents the fractional seconds. Informatica에서는 n > 3일 경우 초 소수 부분이 잘립니다.In Informatica, the fractional seconds will be truncated when n > 3.
문자 길이Character length 최소 19자리(YYYY-MM-DD hh:mm:ss )부터 최대 27자리(YYYY-MM-DD hh:mm:ss.0000000)까지19 positions minimum (YYYY-MM-DD hh:mm:ss ) to 27 maximum (YYYY-MM-DD hh:mm:ss.0000000)
전체 자릿수, 소수 자릿수Precision, scale 0 ~ 7자리, 정확도 100ns.0 to 7 digits, with an accuracy of 100ns. 기본 전체 자릿수는 7자리입니다.The default precision is 7 digits.
스토리지 크기Storage size 전체 자릿수가 3보다 작은 경우 6바이트입니다.6 bytes for precision less than 3.
전체 자릿수가 3 또는 4인 경우 7바이트입니다.7 bytes for precision 3 or 4.
기타 모든 전체 자릿수는 8바이트가 필요합니다.1All other precision require 8 bytes.1
정확도Accuracy 100나노초100 nanoseconds
기본값Default value 1900-01-01 00:00:001900-01-01 00:00:00
달력Calendar 일반 달력Gregorian
사용자 정의 초 소수 부분 자릿수User-defined fractional second precision Yes
표준 시간대 오프셋 인식 및 유지Time zone offset aware and preservation 아니오No
일광 절약 시간제 인식Daylight saving aware 아니오No

1 datetime2 값의 첫 번째 바이트는 값의 전체 자릿수를 저장합니다. 즉, datetime2 값에 필요한 실제 스토리지는 위의 표에 표시된 스토리지 크기에 전체 자릿수를 저장할 추가 1바이트를 더한 것입니다.1 The first byte of a datetime2 value stores the precision of the value, which means the actual storage required for a datetime2 value is the storage size indicated in the table above plus 1 additional byte to store the precision. 이렇게 하면 datetime2 값의 최대 크기는 9바이트가 됩니다. 1바이트는 최대 전체 자릿수의 데이터 스토리지에 대한 8바이트를 더한 자릿수를 저장합니다.This makes the maximum size of a datetime2 value 9 bytes - 1 byte stores precision plus 8 bytes for data storage at maximum precision.

데이터 형식 메타데이터에 대한 자세한 내용은 sys.systypes(Transact-SQL) 또는 TYPEPROPERTY(Transact-SQL)를 참조하십시오.For data type metadata, see sys.systypes (Transact-SQL) or TYPEPROPERTY (Transact-SQL). 일부 날짜 및 시간 데이터 형식의 경우 전체 자릿수와 소수 자릿수는 변할 수 있습니다.Precision and scale are variable for some date and time data types. 열의 전체 자릿수와 소수 자릿수를 얻으려면 COLUMNPROPERTY(Transact-SQL), COL_LENGTH(Transact-SQL) 또는 sys.columns(Transact-SQL)를 참조하십시오.To obtain the precision and scale for a column, see COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL), or sys.columns (Transact-SQL).

datetime2에 대해 지원되는 문자열 리터럴 형식Supported string literal formats for datetime2

다음 표에는 datetime2에 대해 지원되는 ISO 8601 및 ODBC 문자열 리터럴 형식이 나와 있습니다.The following tables list the supported ISO 8601 and ODBC string literal formats for datetime2. datetime2의 날짜 및 시간 부분에 대한 영문자, 숫자, 시간 및 구분되지 않은 시간 형식에 대한 내용은 date(Transact-SQL)time(Transact-SQL)을 참조하세요.For information about alphabetical, numeric, unseparated, and time formats for the date and time parts of datetime2, see date (Transact-SQL) and time (Transact-SQL).

ISO 8601ISO 8601 설명Descriptions
YYYY-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]

YYYY-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]
이 형식은 SET LANGUAGE 및 SET DATEFORMAT 세션 로캘 설정의 영향을 받지 않습니다.This format is not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. T, 콜론(:) 및 마침표(.)는 문자열 리터럴에 포함됩니다(예: '2007-05-02T19:58:47.1234567').The T, the colons (:) and the period (.) are included in the string literal, for example '2007-05-02T19:58:47.1234567'.
ODBCODBC 설명Description
{ ts 'yyyy-mm-dd hh:mm:ss[.소수 자릿수 초]' }{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } ODBC API 사양:ODBC API specific:

소수 자릿수 초를 나타내는 소수점 오른쪽 자릿수는 0에서 최대 7(100나노초)까지 지정할 수 있습니다.The number of digits to the right of the decimal point, which represents the fractional seconds, can be specified from 0 up to 7 (100 nanoseconds).

ANSI 및 ISO 8601 호환성ANSI and ISO 8601 compliance

datetime의 ANSI 및 ISO 8601 호환성은 datetime2에 적용됩니다.The ANSI and ISO 8601 compliance of date and time apply to datetime2.

하위 클라이언트에 대한 이전 버전과의 호환성Backward Compatibility for Down-level Clients

일부 하위 클라이언트는 time, date, datetime2datetimeoffset 데이터 형식을 지원하지 않습니다.Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. 다음 표에서는 상위 SQL ServerSQL Server 인스턴스와 하위 클라이언트 간 형식 매핑을 보여 줍니다.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

SQL ServerSQL Server 데이터 형식data type 하위 클라이언트에 전달된 기본 문자열 리터럴 형식Default string literal format passed to down-level client 하위 수준 ODBCDown-level ODBC 하위 수준 OLEDBDown-level OLEDB 하위 수준 JDBCDown-level JDBC 하위 수준 SQLCLIENTDown-level SQLCLIENT
timetime hh:mm:ss[.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String 또는 SqStringString or SqString
datedate YYYY-MM-DDYYYY-MM-DD SQL_WVARCHAR 또는 SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String 또는 SqStringString or SqString
datetime2datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String 또는 SqStringString or SqString
datetimeoffsetdatetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR 또는 SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String 또는 SqStringString or SqString

date 및 time 데이터 변환Converting date and time data

SQL ServerSQL Server에서 날짜 및 시간 데이터 형식을 변환할 때 날짜나 시간으로 인식되지 않는 값은 모두 무시됩니다.When you convert to date and time data types, SQL ServerSQL Server rejects all values it cannot recognize as dates or times. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL)

다른 날짜 및 시간 형식을 datetime2 데이터 형식으로 변환Converting other date and time types to the datetime2 data type

이 섹션에서는 다른 날짜/시간 데이터 형식이 datetime2 데이터 형식으로 변환하면 어떤 일이 발생하는지를 설명합니다.This section describes what occurs when other date and time data types are converted to the datetime2 data type.

date에서 변환되는 경우 년, 월, 일이 복사됩니다.When the conversion is from date, the year, month and day are copied. 시간 구성 요소는 00:00:00.0000000으로 설정됩니다.The time component is set to 00:00:00.0000000. 다음 코드에서는 date 값을 datetime2 값으로 변환한 결과를 보여 줍니다.The following code shows the results of converting a date value to a datetime2 value.

DECLARE @date date = '12-21-16';
DECLARE @datetime2 datetime2 = @date;

SELECT @datetime2 AS '@datetime2', @date AS '@date';
  
--Result  
--@datetime2                  @date
----------------------------- ----------
--2016-12-21 00:00:00.0000000 2016-12-21

time(n) 에서 변환되는 경우 시간 구성 요소가 복사되고 날짜 구성 요소는 '1900-01-01'로 설정됩니다.When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. 다음 예에서는 time(7) 값을 datetime2 값으로 변환한 결과를 보여 줍니다.The following example shows the results of converting a time(7) value to a datetime2 value.

DECLARE @time time(7) = '12:10:16.1234567';
DECLARE @datetime2 datetime2 = @time;

SELECT @datetime2 AS '@datetime2', @time AS '@time';
  
--Result  
--@datetime2                  @time
----------------------------- ----------------
--1900-01-01 12:10:16.1234567 12:10:16.1234567

smalldatetime에서 변환되는 경우 시간과 분이 복사됩니다.When the conversion is from smalldatetime, the hours and minutes are copied. 초 및 소수 자릿수 초는 0으로 설정됩니다.The seconds and fractional seconds are set to 0. 다음 코드에서는 smalldatetime 값을 datetime2 값으로 변환한 결과를 보여 줍니다.The following code shows the results of converting a smalldatetime value to a datetime2 value.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime2 datetime2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime'; 
  
--Result  
--@datetime2                  @smalldatetime
----------------------------- -----------------------
--2016-12-01 12:32:00.0000000 2016-12-01 12:32:00 

datetimeoffset(n) 에서 변환되는 경우 날짜 및 시간 구성 요소가 복사됩니다.When the conversion is from datetimeoffset(n), the date and time components are copied. 표준 시간대는 잘립니다.The time zone is truncated. 다음 예에서는 datetimeoffset(7) 값을 datetime2 값으로 변환한 결과를 보여 줍니다.The following example shows the results of converting a datetimeoffset(7) value to a datetime2 value.

DECLARE @datetimeoffset datetimeoffset(7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 datetime2 = @datetimeoffset;

SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset'; 
  
--Result  
--@datetime2                  @datetimeoffset
----------------------------- ----------------------------------
--2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00

datetime에서 변환되는 경우 날짜 및 시간이 복사됩니다.When the conversion is from datetime, the date and time are copied. 소수 부분 자릿수는 7자리로 확장됩니다.The fractional precision is extended to 7 digits. 다음 예에서는 datetime 값을 datetime2 값으로 변환한 결과를 보여 줍니다.The following example shows the results of converting a datetime value to a datetime2 value.

DECLARE @datetime datetime = '2016-10-23 12:45:37.333';
DECLARE @datetime2 datetime2 = @datetime;

SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
   
--Result  
--@datetime2                  @datetime
------------------------- ---------------------------
--2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

참고

위의 예에 나와 있는 것처럼 데이터베이스 호환성 수준 130에서 datetime과 datetime2 데이터 형식 간 암시적 변환은 밀리초의 소수 부분을 고려하여 정확도가 향상되므로 다르게 변환된 값을 생성합니다.Under database compatibility level 130, implicit conversions from datetime to datetime2 data types show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values, as seen in the example above. datetime과 datetime2 데이터 형식이 혼합된 비교 시나리오가 있을 때마다 datetime2 데이터 형식으로 명시적 캐스트를 사용합니다.Use explicit casting to datetime2 datatype whenever a mixed comparison scenario between datetime and datetime2 datatypes exists. 자세한 내용은 이 Microsoft 지원 문서를 참조하세요.For more information, refer to this Microsoft Support Article.

문자열 리터럴을 datetime2로 변환Converting String Literals to datetime2

문자열에 포함된 모든 부분의 형식이 올바른 경우 문자열 리터럴에서 날짜/시간 유형으로 변환할 수 있습니다.Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. 그렇지 않으면 런타임 오류가 발생합니다.Otherwise, a runtime error is raised. 날짜/시간 유형에서 문자열 리터럴로의 암시적 변환 또는 명시적 변환에 스타일을 지정하지 않은 경우 현재 세션의 기본 형식이 지정됩니다.Implicit conversions or explicit conversions that do not specify a style, from date and time types to string literals will be in the default format of the current session. 다음 표에서는 문자열 리터럴을 datetime2 데이터 형식으로 변환하는 규칙을 보여 줍니다.The following table shows the rules for converting a string literal to the datetime2 data type.

입력 문자열 리터럴Input string literal datetime2(n)datetime2(n)
ODBC DATEODBC DATE ODBC 문자열 리터럴은 datetime 데이터 형식으로 매핑됩니다.ODBC string literals are mapped to the datetime data type. ODBC DATETIME 리터럴에서 datetime2 형식으로 할당하면 변환 규칙으로 정의된 대로 datetime과 이러한 형식 간에 암시적 변환이 발생합니다.Any assignment operation from ODBC DATETIME literals into datetime2 types will cause an implicit conversion between datetime and this type as defined by the conversion rules.
ODBC TIMEODBC TIME 이전 ODBC DATE 규칙을 참조하세요.See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME 이전 ODBC DATE 규칙을 참조하세요.See previous ODBC DATE rule.
DATE만DATE only TIME 부분의 기본값은 00:00:00입니다.The TIME part defaults to 00:00:00.
TIME만TIME only DATE 부분의 기본값은 1900-1-1입니다.The DATE part defaults to 1900-1-1.
TIMEZONE만TIMEZONE only 기본값이 제공됩니다.Default values are supplied.
DATE+TIMEDATE + TIME 중요하지 않음Trivial
DATE+TIMEZONEDATE + TIMEZONE 허용되지 않습니다.Not allowed.
TIME+TIMEZONETIME + TIMEZONE DATE 부분의 기본값은 1900-1-1입니다.The DATE part defaults to 1900-1-1. TIMEZONE 입력은 무시됩니다.TIMEZONE input is ignored.
DATE+TIME+TIMEZONEDATE + TIME + TIMEZONE 로컬 DATETIME이 사용됩니다.The local DATETIME will be used.

Examples

다음 예에서는 문자열을 각 datetime 데이터 형식으로 캐스팅하는 결과를 비교합니다.The following example compares the results of casting a string to each date and time data type.

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';  

결과 집합은 다음과 같습니다.Here is the result set.

데이터 형식Data type 출력Output
timetime 12:35:29.12:35:29. 12345671234567
datedate 2007-05-082007-05-08
smalldatetimesmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
datetimeoffsetdatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

관련 항목:See also

CAST 및 CONVERT(Transact-SQL)CAST and CONVERT (Transact-SQL)