time(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
하루의 시간을 정의합니다. 시간은 표준 시간대를 인식하지 않으며 24시간제를 기준으로 합니다.
참고 항목
Informatica 정보는 Informatica 커넥터를 사용하는 PDW 고객을 위해 제공됩니다.
시간 설명
속성 | 값 |
---|---|
구문 | time [ (소수 자릿수 초) ] |
사용 | DECLARE @MyTime time(7) CREATE TABLE Table1( Column1 time(7) ) |
소수 자릿수 초 눈금 | 초의 소수 부분에 대한 자릿수를 지정합니다. 0에서 7까지의 정수일 수 있습니다. Informatica의 경우 0에서 3 사이의 정수를 지정할 수 있습니다. 기본 소수 자릿수는 7(100ns)입니다. Microsoft Fabric에서 이 정수는 기본값 없이 0에서 6까지의 정수일 수 있습니다. 전체 자릿수는 Microsoft Fabric에서 지정해야 합니다. |
기본 문자열 리터럴 형식 (하위 수준 클라이언트에 사용됨) |
hh:mm:ss[.nnnnn] for Informatica) 자세한 내용은 하위 수준 클라이언트에 대한 이전 버전과의 호환성 섹션을 참조하세요. |
범위 | 00:00:00.0000000~23:59:59.9999999(Informatica의 경우 00:00:00.000~ 23:59:59.999) |
요소 범위 | hh는 시간을 나타내는 0에서 23 사이의 두 자리 숫자입니다. mm은 분을 나타내는 0에서 59 사이의 두 자리입니다. ss는 두 번째 숫자를 나타내는 0에서 59 사이의 두 자리입니다. n*은 0에서 9999999 사이에 속하는 0부터 7 자리의 숫자로, 소수 자릿수 초를 나타냅니다. Informatica의 경우 n*은 0 ~ 3자릿수로, 0부터 999까지입니다. |
문자 길이 | 최소 8개 위치(hh:mm:ss)에서 최대 16개까지(hh:mm:ss.nnnnnnnn). Informatica의 경우 최댓값은 12(hh:mm:ss.nnn)입니다. |
전체 자릿수, 소수 자릿수 (사용자가 크기 조정만 지정) |
아래 표를 참조하세요. |
스토리지 크기 | 고정된 5바이트는 기본값인 100ns 소수 자릿수 초 정밀도입니다. Informatica에서 기본값은 고정된 4바이트이며 기본값은 1ms 소수 자릿수 초 정밀도입니다. |
정확도(Accuracy) | 100나노초(Informatica에서 1밀리초) |
Default value | 00:00:00 이 값은 date에서 datetime2 또는 datetimeoffset으로의 암시적 변환을 위해 추가된 시간 파트에 사용됩니다. |
사용자 정의 초 소수 부분 자릿수 | 예 |
표준 시간대 오프셋 인식 및 유지 | 아니요 |
일광 절약 시간 인식 | 아니요 |
지정한 소수 자릿수 | 결과(전체 자릿수, 소수 자릿수) | 열 길이(바이트) | 소수 표시 초 자릿수 |
---|---|---|---|
time | (16,7) [(12,3) 인포마티카] | 5 (4 인포마티카) | 7 (3 인포마티카) |
time(0) | (8,0) | 3 | 0-2 |
time(1) | (10,1) | 3 | 0-2 |
time(2) | (11,2) | 3 | 0-2 |
time(3) | (12,3) | 4 | 3~4 |
time(4)* | (13,4) | 4 | 3~4 |
time(5)* | (14,5) | 5 | 5-7 |
time(6)* | (15,6) | 5 | 5-7 |
time(7)* + | (16,7) | 5 | 5-7 |
* Informatica에서는 지원되지 않습니다.
+ Microsoft Fabric에서 지원되지 않습니다.
시간 동안 지원되는 문자열 리터럴 형식
다음 표에서는 시간 데이터 형식에 대한 유효한 문자열 리터럴 형식을 보여 줍니다.
SQL Server | 설명 |
---|---|
hh:mm[:ss][:fractional seconds][AM][PM] hh:mm[:ss][.fractional seconds][AM][PM] hhAM[PM] hh AM[PM] |
시간 값 0은 AM 지정 여부와 관계없이 자정(AM) 이후 시간을 나타냅니다. PM은 시간이 0인 경우 지정할 수 없습니다. 01에서 11까지의 시간 값은 AM이나 PM이 지정되지 않은 경우 정오 이전 시간을 나타냅니다. 값은 AM이 지정된 정오 이전 시간을 나타냅니다. PM이 지정된 경우 값은 정오 이후의 시간을 나타냅니다. 시간 값 12는 AM이나 PM이 지정되지 않은 경우 정오에 시작하는 시간을 나타냅니다. AM을 지정하면 값은 자정에 시작하는 시간을 나타냅니다. PM을 지정하면 정오 이후의 시간을 나타냅니다. 예를 들어 12:01은 정오 이후 1분이며 오후 12:01입니다. 오전 12시,01분은 자정 이후 1분입니다. 오전 12:01을 지정하는 것은 00:01 또는 00:01 AM을 지정하는 것과 같습니다. 13부터 23까지의 시간 값은 AM 또는 PM을 지정하지 않는 경우 정오 이후의 시간을 나타냅니다. 값은 PM이 지정된 정오 이후의 시간도 나타냅니다. 시간 값이 13에서 23까지인 경우 AM을 지정할 수 없습니다. 시간 값 24가 잘못되었습니다. 자정을 나타내려면 12:00 AM 또는 00:00을 사용하세요. 밀리초 앞에 콜론(:) 또는 마침표(.)이 올 수 있습니다. 콜론을 사용하는 경우 이 숫자는 1/1000초 단위를 의미합니다. 마침표가 사용되는 경우 한 자리는 1/10초, 두 자리는 1/10초, 3자리는 1000초를 의미합니다. 예를 들어 12:30:20:1은 12:30을 지난 20초와 1,000초를 나타냅니다. 12:30:20.1은 12:30을 지난 20초와 1/10초를 나타냅니다. |
ISO 8601 | 주의 |
---|---|
hh:mm:ss hh:mm[:ss][.fractional seconds] |
hh는 표준 시간대 오프셋의 시간 수를 나타내는 0에서 23 사이의 두 자리 숫자입니다. mm은 표준 시간대 오프셋의 추가 시간(분)을 나타내는 0에서 59 사이의 두 자리 숫자입니다. |
ODBC | 주의 |
---|---|
{t 'hh:mm:ss[.fractional seconds]'} | ODBC API에 따라 다릅니다. |
ANSI 및 ISO 8601 표준 준수
시간 24를 사용하여 ISO 8601(5.3.2 및 5.3)에 정의된 대로 자정을 나타내고 59보다 1초 이상 윤초를 나타내는 것은 이전 버전과 호환되며 기존 날짜 및 시간 유형과 일치하도록 지원되지 않습니다.
기본 문자열 리터럴 형식(하위 수준 클라이언트에 사용됨)은 hh:mm:ss[.nnnnnnn]으로 정의된 SQL 표준 양식과 일치합니다. 이 형식은 소수 자릿수 초를 제외한 TIME에 대한 ISO 8601 정의와 유사합니다.
하위 수준 클라이언트에 대한 이전 버전과의 호환성
일부 하위 수준 클라이언트는 시간, 날짜, 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 |
Date 및 Time 데이터 변환
날짜 및 시간 데이터 형식으로 변환할 때 SQL Server는 날짜 또는 시간으로 인식할 수 없는 모든 값을 거부합니다. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.
time(n) 데이터 형식을 다른 Date 및 Time 형식으로 변환
이 섹션에서는 time 데이터 형식이 다른 날짜 및 시간 데이터 형식으로 변환될 때 어떤 일이 발생하는지를 설명합니다.
변환이 time(n)이면 시간, 분 및 초가 복사됩니다. 대상 전체 자릿수가 원본 정밀도보다 작으면 소수 자릿수 초가 대상 전체 자릿수에 맞게 반올림됩니다. 다음 예제에서는 값을 값 time(3)
으로 변환한 time(4)
결과를 보여줍니다.
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
결과 집합은 다음과 같습니다.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
변환이 날짜로 변환되면 변환이 실패하고 오류 메시지 206이 발생합니다. "피연산자 형식 충돌: 날짜가 시간과 호환되지 않습니다.".
변환이 datetime, hour, minute 및 second 값으로 복사되고 날짜 구성 요소가 '1900-01-01'로 설정된 경우 시간(n) 값의 소수 자릿수 초 전체 자릿수가 3자리보다 크면 날짜/시간 결과가 잘립니다. 다음 코드는 값을 값 datetime
으로 변환한 time(4)
결과를 보여줍니다.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
결과 집합은 다음과 같습니다.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
smalldatetime으로 변환되면 날짜가 '1900-01-01'로 설정되고 시간 및 분 값이 반올림됩니다. 초 및 소수 자릿수 초는 0으로 설정됩니다. 다음 코드는 값을 값 smalldatetime
으로 변환한 time(4)
결과를 보여줍니다.
분 값의 반올림 표시:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
결과 집합은 다음과 같습니다.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
시간 값의 반올림 표시:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
결과 집합은 다음과 같습니다.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
datetimeoffset(n)으로 변환되면 날짜가 '1900-01-01'로 설정되고 시간이 복사됩니다. 표준 시간대 오프셋이 +00:00으로 설정됩니다. time(n) 값의 소수 자릿수 초 전체 자릿수가 datetimeoffset(n) 값의 전체 자릿수보다 크면 값이 올립니다. 다음 예제에서는 값을 datetimeoffset(3)
형식으로 time(4)
변환한 결과를 보여줍니다.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
결과 집합은 다음과 같습니다.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
datetime2(n)로 변환할 때 날짜가 '1900-01-01'로 설정되고 시간 구성 요소가 복사되고 표준 시간대 오프셋이 00:00으로 설정됩니다. datetime2(n) 값의 소수 자릿수 초 전체 자릿수가 time(n) 값보다 크면 값이 맞게 반올림됩니다. 다음 예제에서는 값을 값 datetime2(2)
으로 변환한 time(4)
결과를 보여줍니다.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
결과 집합은 다음과 같습니다.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
문자열 리터럴을 time(n)으로 변환
문자열의 모든 부분이 유효한 형식인 경우 문자열 리터럴에서 날짜 및 시간 형식으로 변환할 수 있습니다. 그렇지 않으면 런타임 오류가 발생합니다. 날짜/시간 유형에서 문자열 리터럴로의 암시적 변환 또는 명시적 변환에 스타일을 지정하지 않은 경우 현재 세션의 기본 형식이 지정됩니다. 다음 표에서는 문자열 리터럴을 시간 데이터 형식으로 변환하는 규칙을 보여줍니다.
입력 문자열 리터럴 | 변환 규칙 |
---|---|
ODBC 날짜 | ODBC 문자열 리터럴은 datetime 데이터 형식에 매핑됩니다. ODBC DATETIME 리터럴에서 time 형식으로 할당하면 변환 규칙으로 정의된 대로 datetime과 이러한 형식 간에 암시적 변환이 발생합니다. |
ODBC 시간 | 위의 ODBC DATE 규칙을 참조하세요. |
ODBC DATETIME | 위의 ODBC DATE 규칙을 참조하세요. |
날짜만 | 기본값이 제공됩니다. |
TIME만 | 중요하지 않음 |
표준 시간대만 | 기본값이 제공됩니다. |
날짜 + 시간 | 입력 문자열의 TIME 부분이 사용됩니다. |
날짜 + 표준 시간대 | 허용되지 않음. |
TIME+TIMEZONE | 입력 문자열의 TIME 부분이 사용됩니다. |
DATE+TIME+TIMEZONE | 로컬 DATETIME의 TIME 부분이 사용됩니다. |
예제
A. 날짜 및 시간 데이터 형식 비교
다음 예제에서는 각 날짜 및 시간 데이터 형식에 문자열을 캐스팅한 결과를 비교합니다.
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 |
B. Time(7) 열에 유효한 시간 문자열 리터럴 삽입
다음 표에서는 데이터 형식 시간(7) 의 열에 삽입할 수 있는 여러 문자열 리터럴을 나열하고 해당 열에 저장되는 값을 나열합니다.
문자열 리터럴 형식 형식 | 삽입되는 문자열 리터럴 | 저장되는 time(7) 값 | 설명 |
---|---|---|---|
SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | 콜론(:) 소수 자릿수 초 정밀도 앞에 오면 소수 자릿수가 세 위치를 초과할 수 없거나 오류가 발생합니다. |
SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | AM 또는 PM을 지정하면 시간은 리터럴 AM 또는 PM 없이 24시간 형식으로 저장됩니다. |
SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | AM 또는 PM을 지정하면 시간은 리터럴 AM 또는 PM 없이 24시간 형식으로 저장됩니다. |
SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | AM 또는 PM 앞의 공간은 선택 사항입니다. |
SQL Server | '오전 01시' | 01:00:00.0000000 | 시간만 지정하면 다른 모든 값은 0입니다. |
SQL Server | '01 AM' | 01:00:00.0000000 | AM 또는 PM 앞의 공간은 선택 사항입니다. |
SQL Server | '01:01:01' | 01:01:01.0000000 | 소수 자릿수 초 정밀도를 지정하지 않으면 데이터 형식으로 정의된 각 위치는 0입니다. |
ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | ISO 8601을 준수하려면 AM 또는 PM이 아닌 24시간 형식을 사용합니다. |
ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | TZD(선택적 표준 시간대 차이)는 입력에 허용되지만 저장되지는 않습니다. |
C. 각 date 및 time 날짜 형식의 열에 시간 문자열 리터럴 삽입
다음 표에서 첫 번째 열은 두 번째 열에 표시된 날짜 또는 시간 데이터 형식의 데이터베이스 테이블 열에 삽입할 시간 문자열 리터럴을 보여줍니다. 세 번째 열은 데이터베이스 테이블 열에 저장될 값을 보여 줍니다.
삽입되는 문자열 리터럴 | 열 데이터 형식 | 열에 저장되는 값 | 설명 |
---|---|---|---|
'12:12:12.1234567' | time(7) | 12:12:12.1234567 | 소수 자릿수 초 전체 자릿수가 열에 지정된 값을 초과하면 문자열이 오류 없이 잘립니다. |
'2007-05-07' | date | NULL | 언제든지 값으로 인해 INSERT 문이 실패합니다. |
'12:12:12' | smalldatetime | 1900-01-01 12:12:00 | 소수 자릿수 초 전체 자릿수 값으로 인해 INSERT 문이 실패합니다. |
'12:12:12.123' | 날짜/시간 | 1900-01-01 12:12:12.123 | 세 위치보다 긴 두 번째 정밀도는 INSERT 문이 실패합니다. |
'12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | 소수 자릿수 초 전체 자릿수가 열에 지정된 값을 초과하면 문자열이 오류 없이 잘립니다. |
'12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | 소수 자릿수 초 전체 자릿수가 열에 지정된 값을 초과하면 문자열이 오류 없이 잘립니다. |