datetime2(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Managed Instance Azure Synapse Analytics 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[.nnnnnnn] 자세한 내용은 이 문서의 뒷부분에 있는 하위 수준 클라이언트에 대한 이전 버전과의 호환성을 참조하세요. |
날짜 범위 | 0001-01-01 ~ 9999-12-31 CE 1년 1월 1일부터 CE 9999년 12월 31일까지 |
시간 범위 | 00:00:00 ~ 23:59:59.9999999 |
표준 시간대 오프셋 범위 | None |
요소 범위 | yyyy 는 연도를 나타내는 4자리 숫자 0001 9999 입니다.MM 는 지정된 연도의 월을 나타내는 두 자리 숫자입니다 01 12 .dd 은 지정된 월의 요일을 나타내는 월에 따라 달라 01 31 지는 두 자리 숫자입니다.HH 는 시간을 나타내는 두 자리 숫자입니다 00 23 .mm 는 분을 나타내는 2자리 숫자입니다 00 59 .ss 는 두 번째 숫자를 나타내는 두 자리 숫자입니다 00 59 .n* 는 소수 자릿수 초를 나타내는 0~0 9999999 7자리 숫자입니다. Informatica에서 n이 .보다 3 작으면 소수 자릿수 초가 잘립니다. |
문자 길이 | 최소 19개 위치(yyyy-MM-dd HH:mm:ss )에서 최대 27개(yyyy-MM-dd HH:mm:ss.0000000 ) |
전체 자릿수, 소수 자릿수 | 100나노초(100 ns)의 정확도로 0~7자리 숫자 기본 전체 자릿수는 7자리입니다. Microsoft Fabric Data Warehouse에서 이 정밀도는 기본값 없이 0에서 6까지의 정수일 수 있습니다. 전체 자릿수는 Microsoft Fabric Data Warehouse에 지정해야 합니다. |
스토리지 크기 1 | 전체 자릿수가 3보다 작은 경우 6바이트입니다. 전체 자릿수 3 또는 4의 경우 7바이트입니다. 다른 모든 정밀도에는 8바이트가 필요합니다. 2 |
정확도(Accuracy) | 100나노초 |
Default value | 1900-01-01 00:00:00 |
캘린더 | 양력 |
사용자 정의 초 소수 부분 자릿수 | 예 |
표준 시간대 오프셋 인식 및 유지 | 아니요 |
일광 절약 시간 인식 | 아니요 |
1 제공된 값은 압축되지 않은 rowstore에 대한 값입니다. 데이터 압축 또는 columnstore를 사용하면 각 정밀도에 대한 스토리지 크기가 변경될 수 있습니다. 또한 디스크 및 메모리의 스토리지 크기는 다를 수 있습니다. 예를 들어 일괄 처리 모드를 사용하는 경우 datetime2 값은 항상 메모리에 8바이트가 필요합니다.
2 datetime2 값이 varbinary 값으로 캐스팅되면 전체 자릿수를 저장하기 위해 varbinary 값에 추가 바이트가 추가됩니다.
데이터 형식 메타데이터는 sys.systypes 또는 TYPEPROPERTY를 참조하세요. 전체 자릿수와 소수 자릿수는 일부 날짜 및 시간 데이터 형식에 대한 변수입니다. 열 의 전체 자릿수와 배율을 가져오려면 COLUMNPROPERTY, COL_LENGTH 또는 sys.columns를 참조하세요.
datetime2에 대해 지원되는 문자열 리터럴 형식
다음 표에서는 datetime2에 대해 지원되는 ISO 8601 및 ODBC 문자열 리터럴 형식을 나열합니다. datetime2의 날짜 및 시간 부분에 대한 사전순, 숫자, 비제공 및 시간 형식에 대한 자세한 내용은 날짜 및 시간을 참조하세요.
ISO 8601 | 설명 |
---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
이 형식은 세션 SET DATEFORMAT 로캘 설정의 SET LANGUAGE 영향을 받지 않습니다. T 예를 들어 2024-05-02T19:58:47.1234567 , 콜론(: ) 및 마침표(. )가 문자열 리터럴에 포함됩니다. |
ODBC | 설명 |
---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
ODBC API 사양: 소수 자릿수 초를 나타내는 소수점 오른쪽의 자릿수는 0에서 7(100나노초)까지 지정할 수 있습니다. |
ANSI 및 ISO 8601 규정 준수
date와 time의 ANSI 및 ISO 8601 호환성은 datetime2에 적용됩니다.
하위 수준 클라이언트에 대한 이전 버전과의 호환성
일부 하위 수준 클라이언트는 시간, 날짜, 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 | 문자열 또는 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 |
날짜 및 시간 데이터 변환
날짜 및 시간 데이터 형식으로 변환할 때 데이터베이스 엔진 날짜 또는 시간으로 인식할 수 없는 모든 값을 거부합니다. 날짜 및 시간 데이터와 함께 CAST 및 CONVERT 함수를 사용하는 방법에 대한 자세한 내용은 CAST 및 CONVERT를 참조하세요 .
다른 날짜 및 시간 형식을 datetime2 데이터 형식으로 변환
이 섹션에서는 다른 날짜 및 시간 데이터 형식을 datetime2 데이터 형식으로 변환할 때 발생하는 상황에 대해 설명합니다.
변환이 날짜부터인 경우 연도, 월 및 날짜가 복사됩니다. 시간 구성 요소는 00:00:00.0000000으로 설정됩니다. 다음 코드는 값을 값 datetime2
으로 변환한 date
결과를 보여줍니다.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
결과 집합은 다음과 같습니다.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
변환이 time(n)에서 이면 시간 구성 요소가 복사되고 날짜 구성 요소가 .로 1900-01-01
설정됩니다. 다음 예제에서는 time(7) 값을 datetime2 값으로 변환한 결과를 보여 줍니다.
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
결과 집합은 다음과 같습니다.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
smalldatetime에서 변환되면 시간 및 분이 복사됩니다. 초 및 소수 자릿수 초는 0으로 설정됩니다. 다음 코드는 값을 값 datetime2
으로 변환한 smalldatetime
결과를 보여줍니다.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
결과 집합은 다음과 같습니다.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
datetimeoffset(n)에서 변환되는 경우 날짜 및 시간 구성 요소가 복사됩니다. 표준 시간대가 잘립니다. 다음 예제에서는 값을 값 datetime2
으로 변환한 datetimeoffset(7)
결과를 보여줍니다.
DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2',
@datetimeoffset AS '@datetimeoffset';
결과 집합은 다음과 같습니다.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
날짜/시간에서 변환되면 날짜와 시간이 복사됩니다. 소수 자릿수는 7자리로 확장됩니다. 다음 예제에서는 값을 값 datetime2
으로 변환한 datetime
결과를 보여줍니다.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
결과 집합은 다음과 같습니다.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
datetime을 사용하는 경우 datetime2로 명시적으로 캐스팅
데이터베이스 호환성 수준 130 이상에서 datetime에서 datetime2 데이터 형식으로의 암시적 변환은 소수 밀리초를 고려하여 정확도가 향상되어 이전 예제와 같이 변환된 값이 다릅니다. datetime과 datetime2 데이터 형식 간의 혼합 비교 시나리오가 있을 때마다 datetime2 데이터 형식으로 명시적 캐스팅을 사용합니다. 자세한 내용은 일부 데이터 형식 및 일반적이지 않은 작업 처리의 SQL Server 및 Azure SQL Database 개선 사항을 참조 하세요.
문자열 리터럴을 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-01-01 . |
TIMEZONE 에만 해당 |
기본값이 제공됩니다. |
DATE + TIME |
사소한. |
DATE + TIMEZONE |
허용되지 않음. |
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 |