다음을 통해 공유


datetime2(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System(PDW) SQL 분석 엔드포인트

24시간 시계를 기반으로 하는 하루 중 시간과 결합된 날짜를 정의합니다. datetime2 는 더 큰 날짜 범위, 더 큰 기본 소수 자릿수 및 선택적 사용자 지정 정밀도를 가진 기존 datetime 형식의 확장으로 간주할 수 있습니다.

datetime2 설명

속성
구문 datetime2 [ (fractional seconds precision) ]
사용 DECLARE @MyDatetime2 datetime2(7)

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

(하위 수준 클라이언트에 사용됨)
YYYY-MM-DD hh:mm:ss[.소수 자릿수 초]

자세한 내용은 뒷부분에 나오는 "하위 클라이언트에 대한 이전 버전과의 호환성" 섹션을 참조하세요.
날짜 범위 0001-01-01부터 31.12.99까지

9999년 1월 1일 CE~9999년 12월 31일
시간 범위 00:00:00~23:59:59.99999999
표준 시간대 오프셋 범위 None
요소 범위 YYYY는 0001에서 9999까지의 4자리 숫자로, 1년을 나타냅니다.

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

DD는 지정된 월의 일을 나타내는 달에 따라 01에서 31까지의 두 자리 숫자입니다.

hh는 시간을 나타내는 00에서 23 사이의 두 자리 숫자입니다.

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

ss는 두 번째 숫자를 나타내는 00에서 59 사이의 두 자리 숫자입니다.

n*은 0에서 9999999 사이에 속하는 0 ~ 7 자리의 숫자로, 소수 자릿수 초를 나타냅니다. Informatica에서는 n > 3일 경우 초 소수 부분이 잘립니다.
문자 길이 최소 19개 위치(YYYY-MM-DD hh:mm:ss) - 최대 27개(YYYY-MM-DD hh:mm:ss.0000000)
전체 자릿수, 소수 자릿수 정확도가 100ns인 0~7자리 숫자입니다. 기본 전체 자릿수는 7자리입니다.

Microsoft Fabric에서 이 정수는 기본값 없이 0에서 6까지의 정수일 수 있습니다. 전체 자릿수는 Microsoft Fabric에서 지정해야 합니다.
스토리지 크기 1 전체 자릿수가 3보다 작은 경우 6바이트입니다.
전체 자릿수 3 또는 4의 경우 7바이트입니다.
다른 모든 전체 자릿수에는 8바이트가 필요합니다.2
정확도 100나노초
Default value 1900-01-01 00:00:00
캘린더 양력
사용자 정의 초 소수 부분 자릿수
표준 시간대 오프셋 인식 및 유지 아니요
일광 절약 시간 인식 아니요

1 제공된 값은 압축되지 않은 rowstore에 대한 값입니다. 데이터 압축 또는 columnstore를 사용하면 각 전체 자릿수에 대한 스토리지 크기가 변경될 수 있습니다. 또한 디스크 및 메모리의 스토리지 크기는 서로 다를 수 있습니다. 예를 들어 일괄 처리 모드를 사용하는 경우 datetime2 값은 항상 메모리에 8바이트가 필요합니다.

2 datetime2 값이 varbinary 값으로 캐스팅되면 1바이트가 varbinary 값에 추가되어 전체 자릿수를 저장합니다.

데이터 형식 메타데이터에 대한 자세한 내용은 sys.systypes(Transact-SQL) 또는 TYPEPROPERTY(Transact-SQL)를 참조하세요. 전체 자릿수와 소수 자릿수는 일부 날짜 및 시간 데이터 형식에 대한 변수입니다. 열의 전체 자릿수와 소수 자릿수를 얻으려면 COLUMNPROPERTY(Transact-SQL), COL_LENGTH(Transact-SQL) 또는 sys.columns(Transact-SQL)를 참조하세요.

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

다음 표에서는 datetime2에 대해 지원되는 ISO 8601 및 ODBC 문자열 리터럴 형식을 나열합니다. datetime2의 날짜 및 시간 부분에 대한 영문자, 숫자, 구분되지 않은 시간 형식에 대한 내용은 날짜(Transact-SQL)시간(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[.fractional seconds]' } ODBC API 사양:

소수 자릿수 초를 나타내는 소수점 오른쪽의 자릿수는 0에서 7(100나노초)까지 지정할 수 있습니다.

ANSI 및 ISO 8601 규정 준수

datetime의 ANSI 및 ISO 8601 호환성은 datetime2에 적용됩니다.

하위 수준 클라이언트에 대한 이전 버전과의 호환성

일부 하위 수준 클라이언트는 시간, 날짜, datetime2datetimeoffset 데이터 형식을 지원하지 않습니다. 다음 표에서는 SQL Server의 상위 수준 인스턴스와 하위 수준 클라이언트 간의 형식 매핑을 보여 줍니다.

SQL Server 데이터 형식 하위 수준 클라이언트에 전달되는 기본 문자열 리터럴 형식 하위 수준 ODBC 하위 수준 OLEDB 하위 수준 JDBC 하위 수준 SQLCLIENT
time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String 문자열 또는 SqString
date YYYY-MM-DD SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String 문자열 또는 SqString
datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String 문자열 또는 SqString
datetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String 문자열 또는 SqString

날짜 및 시간 데이터 변환

날짜 및 시간 데이터 형식으로 변환할 때 SQL Server는 날짜 또는 시간으로 인식할 수 없는 모든 값을 거부합니다. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.

다른 날짜 및 시간 형식을 datetime2 데이터 형식으로 변환

이 섹션에서는 다른 날짜 및 시간 데이터 형식을 datetime2 데이터 형식으로 변환할 때 발생하는 상황에 대해 설명합니다.

date에서 변환되는 경우 년, 월, 일이 복사됩니다. 시간 구성 요소는 00:00:00.0000000으로 설정됩니다. 다음 코드는 값을 값 datetime2 으로 변환한 date 결과를 보여줍니다.

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'로 설정됩니다. 다음 예제에서는 값을 값 datetime2 으로 변환한 time(7) 결과를 보여줍니다.

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에서 변환되면 시간 및 분이 복사됩니다. 초 및 소수 자릿수 초는 0으로 설정됩니다. 다음 코드는 값을 값 datetime2 으로 변환한 smalldatetime 결과를 보여줍니다.

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)에서 변환되는 경우 날짜 및 시간 구성 요소가 복사됩니다. 표준 시간대가 잘립니다. 다음 예제에서는 값을 값 datetime2 으로 변환한 datetimeoffset(7) 결과를 보여줍니다.

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

날짜/시간에서 변환되면 날짜와 시간이 복사됩니다. 소수 자릿수는 7자리로 확장됩니다. 다음 예제에서는 값을 값 datetime2 으로 변환한 datetime 결과를 보여줍니다.

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 데이터 형식으로의 암시적 변환은 분수 밀리초를 고려하여 정확도가 향상되어 위의 예제와 같이 변환된 값이 다릅니다. datetime과 datetime2 데이터 형식이 혼합된 비교 시나리오가 있을 때마다 datetime2 데이터 형식으로 명시적 캐스트를 사용합니다. 자세한 내용은 이 Microsoft 지원 문서를 참조하세요.

문자열 리터럴을 datetime2로 변환

문자열의 모든 부분이 유효한 형식인 경우 문자열 리터럴에서 날짜 및 시간 형식으로 변환할 수 있습니다. 그렇지 않으면 런타임 오류가 발생합니다. 날짜/시간 유형에서 문자열 리터럴로의 암시적 변환 또는 명시적 변환에 스타일을 지정하지 않은 경우 현재 세션의 기본 형식이 지정됩니다. 다음 표에서는 문자열 리터럴을 datetime2 데이터 형식으로 변환하는 규칙을 보여줍니다.

입력 문자열 리터럴 datetime2(n)
ODBC 날짜 ODBC 문자열 리터럴은 datetime 데이터 형식에 매핑됩니다. ODBC DATETIME 리터럴에서 datetime2 형식으로 할당하면 변환 규칙으로 정의된 대로 datetime과 이러한 형식 간에 암시적 변환이 발생합니다.
ODBC 시간 이전 ODBC DATE 규칙을 참조하세요.
ODBC DATETIME 이전 ODBC DATE 규칙을 참조하세요.
날짜만 TIME 파트의 기본값은 00:00:00입니다.
TIME만 DATE 부분은 기본적으로 1900-1-1로 설정됩니다.
표준 시간대만 기본값이 제공됩니다.
날짜 + 시간 중요하지 않음
날짜 + 표준 시간대 허용되지 않음.
TIME+TIMEZONE DATE 부분은 기본적으로 1900-1-1로 설정됩니다. TIMEZONE 입력은 무시됩니다.
DATE+TIME+TIMEZONE 로컬 DATETIME이 사용됩니다.

예제

다음 예제에서는 각 날짜시간 데이터 형식에 문자열을 캐스팅한 결과를 비교합니다.

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
날짜/시간 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)