날짜 및 시간 데이터

SQL Server 2008에는 날짜 및 시간 정보를 처리하기 위한 새로운 데이터 형식이 도입되었습니다. 새로운 데이터 형식에는 개별 날짜 형식과 시간 형식을 비롯하여 보다 큰 범위의 확장된 데이터 형식, 정밀도 및 표준 시간대 인식 기능이 포함됩니다. .NET Framework 버전 3.5 SP(서비스 팩) 1부터는 .NET Framework Data Provider for SQL Server(System.Data.SqlClient)에 SQL Server 2008 데이터베이스 엔진의 새로운 모든 기능이 완벽하게 지원됩니다. SqlClient에서 이러한 새 기능을 사용하려면 .NET Framework 3.5 SP1 이상을 설치해야 합니다.

SQL Server 2008보다 이전의 SQL Server 버전에는 날짜 및 시간 값을 사용하기 위한 두 가지 데이터 형식 datetimesmalldatetime이 있습니다. 두 데이터 형식 모두 날짜 값과 시간 값을 모두 포함하므로 날짜나 시간 값만 가지고 작업하기는 어려웠습니다. 또한 이들 데이터 형식은 1753년 영국에 양력이 도입된 이후의 날짜만 지원합니다. 또 다른 제한 사항은 이러한 이전 데이터 형식이 표준 시간대를 인식하지 못해 여러 표준 시간대에서 발생하는 데이터로 작업하기가 어렵다는 것입니다.

SQL Server의 날짜 및 시간 형식에 대한 자세한 내용은 날짜 및 시간 데이터 형식 및 함수를 참조하세요.

SQL Server 2008에 도입된 날짜/시간 데이터 형식

다음 표에서는 새로운 날짜 및 시간 데이터 형식에 대해 설명합니다.

SQL Server 데이터 형식 설명
date date 데이터 형식은 하루 단위이며 범위는 01년 1월 1일부터 9999년 12월 31일까지입니다. 기본값은 1900년 1월 1일입니다. 스토리지 크기는 3바이트입니다.
time time 데이터 형식은 24시간제를 기준으로 시간 값만 저장합니다. time 데이터 형식의 범위는 00:00:00.0000000~23:59:59.9999999이며 정확도는 100나노초입니다. 기본값은 00:00:00.0000000(자정)입니다. time 데이터 형식은 초에 대해 소수로 표현되는 사용자 정의 정밀도를 지원하며 지정된 정밀도에 따라 스토리지 크기는 3바이트에서 6바이트까지의 범위 내에서 달라집니다.
datetime2 datetime2 데이터 형식은 datetime 데이터 형식의 범위와 정밀도를 하나의 데이터 형식으로 통합합니다.

기본값과 문자열 리터럴 형식은 datetime 데이터 형식에 정의된 값과 동일합니다.
datetimeoffset datetimeoffset 데이터 형식은 datetime2의 모든 기능을 포함하며 표준 시간대 오프셋 기능을 추가로 지원합니다. 표준 시간대 오프셋은 [+|-] HH:MM으로 표현됩니다. HH는 00부터 14까지의 두 자리 숫자로, 표준 시간대 오프셋의 시간을 나타냅니다. MM은 00부터 59까지의 두 자리 숫자로, 표준 시간대 오프셋의 분을 나타냅니다. 시간 형식은 100나노초까지 지원합니다. 필수 값인 + 또는 - 부호는 현지 시간을 얻기 위해 표준 시간대 오프셋을 UTC(Universal Time Coordinate 또는 그리니치 표준시)에 더할 것인지 또는 UTC에서 뺄 것인지를 나타냅니다.

참고 항목

Type System Version 키워드 사용에 관한 자세한 내용은 ConnectionString을 참조하세요.

날짜 형식 및 날짜 순서

SQL Server에서 날짜 및 시간 값을 구문 분석하는 방법은 형식 시스템 버전과 서버 버전뿐만 아니라 서버의 기본 언어 설정과 형식 설정에 따라 달라집니다. 특정 언어의 날짜 형식에 사용할 수 있는 날짜 문자열이라도 다른 언어와 날짜 형식 설정을 사용하는 연결에서 쿼리를 실행할 경우 인식되지 않을 수 있습니다.

Transact-SQL SET LANGUAGE 문은 날짜 부분의 순서를 결정하는 DATEFORMAT을 암시적으로 설정합니다. 연결에 SET DATEFORMAT Transact-SQL 문을 사용하면 날짜 부분을 MDY, DMY, YMD, YDM, MYD 또는 DYM 순서로 정렬하여 날짜 값을 명확하게 나타낼 수 있습니다.

연결에 대해 DATEFORMAT을 지정하지 않으면 SQL Server는 연결과 연결된 기본 언어를 사용합니다. 예를 들어 '01/02/03'의 경우 언어가 영어(미국)로 설정된 서버에서는 MDY(January 2, 2003)로 해석되고 언어가 영어(영국)로 설정된 서버에서는 DMY(February 1, 2003)로 해석됩니다. 연도는 세기 값의 구분 기준 날짜를 정의하는 SQL Server의 연도 구분 규칙을 사용하여 결정됩니다. 자세한 내용은 2자리 연도 구분 옵션을 참조하세요.

참고 항목

YDM 날짜 형식은 문자열 형식에서 date, time, datetime2 또는 datetimeoffset으로 변환할 경우 지원되지 않습니다.

SQL Server가 날짜 및 시간 데이터를 해석하는 방법에 대한 자세한 내용은 날짜 및 시간 데이터 사용을 참조하세요.

날짜/시간 데이터 형식 및 매개 변수

새 날짜 및 시간 데이터 형식을 지원하기 위해 다음 열거형이 SqlDbType에 추가되었습니다.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

위의 SqlDbType 열거형 중 하나를 사용하여 SqlParameter의 데이터 형식을 지정할 수 있습니다.

참고 항목

SqlParameterDbType 속성을 SqlDbType.Date로 설정할 수 없습니다.

또한 SqlParameter 개체의 DbType 속성을 특정 SqlParameter 열거형 값으로 설정하면 일반적인 방식으로 DbType의 형식을 지정할 수 있습니다. datetime2datetimeoffset 데이터 형식을 지원하기 위해 다음 열거형 값이 DbType에 추가되었습니다.

  • DbType.DateTime2

  • DbType.DateTimeOffset

이러한 새 열거형은 이전 버전의 .NET Framework에서 사용할 수 있는 Date, TimeDateTime 열거형을 보완합니다.

매개 변수 개체의 .NET Framework 데이터 공급자 형식은 매개 변수 개체 값의 .NET Framework 형식이나 매개 변수 개체의 DbType에서 유추됩니다. 새 날짜 및 시간 데이터 형식을 지원하기 위해 도입된 새 System.Data.SqlTypes 데이터 형식은 없습니다. 다음 표에서는 SQL Server 2008 날짜 및 시간 데이터 형식과 CLR 데이터 형식 간의 매핑에 대해 설명합니다.

SQL Server 데이터 형식 .NET Framework 형식 System.Data.SqlDbType System.Data.DbType
날짜 System.DateTime 날짜 날짜
time System.TimeSpan Time Time
datetime2 System.DateTime DateTime2 DateTime2
datetimeoffset System.DateTimeOffset DateTimeOffset DateTimeOffset
날짜/시간 System.DateTime DateTime DateTime
smalldatetime System.DateTime DateTime DateTime

SqlParameter 속성

다음 표에서는 날짜 및 시간 데이터 형식과 관련된 SqlParameter 속성을 설명합니다.

속성 설명
IsNullable 값이 nullable인지 여부를 가져오거나 설정합니다. 서버에 null 매개 변수 값을 보낼 때는 DBNull(Visual Basic에서는 null)이 아니라 Nothing을 지정해야 합니다. 데이터베이스 null에 대한 자세한 내용은 Handling Null Values를 참조하세요.
Precision 값을 나타내는 데 사용되는 최대 자릿수를 가져오거나 설정합니다. 날짜 및 시간 데이터 형식에서는 이 설정이 무시됩니다.
Scale Time, DateTime2DateTimeOffset에 대해 값의 시간 부분이 확인되는 소수 자릿수를 가져오거나 설정합니다. 기본값은 0이며 이는 값에서 실제 자릿수가 유추되어 서버에 전송됨을 의미합니다.
Size 날짜 및 시간 데이터 형식에서 무시됩니다.
Value 매개 변수 값을 가져오거나 설정합니다.
SqlValue 매개 변수 값을 가져오거나 설정합니다.

참고 항목

0보다 작거나 24시간보다 크거나 같은 시간 값은 ArgumentException을 throw합니다.

매개 변수 만들기

SqlParameter 개체는 해당 생성자를 사용하거나, SqlCommandParameters 메서드를 호출하여 AddSqlParameterCollection 컬렉션에 추가하는 방법으로 만들 수 있습니다. Add 메서드는 생성자 인수 또는 기존 매개 변수 개체를 입력으로 사용합니다.

이 항목의 다음 섹션에서는 날짜 및 시간 매개 변수를 지정하는 방법에 대한 예제를 제공합니다. 매개 변수 작업에 대한 추가 예는 매개 변수 및 매개 변수 데이터 형식 구성DataAdapter 매개 변수를 참조하세요.

Date 예제

다음 코드 조각에서는 date 매개 변수를 지정하는 방법을 보여 줍니다.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@Date";  
parameter.SqlDbType = SqlDbType.Date;  
parameter.Value = "2007/12/1";  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Date"  
parameter.SqlDbType = SqlDbType.Date  
parameter.Value = "2007/12/1"  

Time 예제

다음 코드 조각에서는 time 매개 변수를 지정하는 방법을 보여 줍니다.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@time";  
parameter.SqlDbType = SqlDbType.Time;  
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Time"  
parameter.SqlDbType = SqlDbType.Time  
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;  

Datetime2 예제

다음 코드 조각에서는 날짜 부분과 시간 부분이 모두 포함된 datetime2 매개 변수를 지정하는 방법을 보여 줍니다.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@Datetime2";  
parameter.SqlDbType = SqlDbType.DateTime2;  
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Datetime2"  
parameter.SqlDbType = SqlDbType.DateTime2  
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");  

DateTimeOffSet 예제

다음 코드 예제에서는 날짜, 시간 및 표준 시간대 오프셋이 0으로 설정된 DateTimeOffSet 매개 변수를 지정하는 방법을 보여 줍니다.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@DateTimeOffSet";  
parameter.SqlDbType = SqlDbType.DateTimeOffSet;  
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@DateTimeOffSet"  
parameter.SqlDbType = SqlDbType.DateTimeOffSet  
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");  

AddWithValue

다음 코드 조각과 같이 SqlCommandAddWithValue 메서드를 사용하여 매개 변수를 제공할 수도 있습니다. 그러나 AddWithValue 메서드를 사용할 경우 매개 변수에 DbType 또는 SqlDbType을 지정할 수 없습니다.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("16660902"));  
command.Parameters.AddWithValue( _  
    "@date", DateTimeOffset.Parse("16660902"))  

@date 매개 변수는 서버의 date, datetime또는 datetime2 데이터 형식에 매핑할 수 있습니다. 새 datetime 데이터 형식을 사용할 때는 인스턴스의 데이터 형식을 매개 변수의 SqlDbType 속성에 명시적으로 설정해야 합니다. Variant를 사용하거나 암시적으로 매개 변수 값을 제공할 경우 datetimesmalldatetime 데이터 형식에 대한 이전 버전과의 호환성에 문제가 발생할 수 있습니다.

다음 표에서는 각 CLR 형식에서 유추되는 SqlDbTypes을 보여 줍니다.

CLR 형식 유추되는 SqlDbType
DateTime SqlDbType.DateTime
TimeSpan SqlDbType.Time
DateTimeOffset SqlDbType.DateTimeOffset

날짜 및 시간 데이터 검색

다음 표에서는 SQL Server 2008 날짜 및 시간 값을 검색하는 데 사용되는 메서드에 대해 설명합니다.

SqlClient 메서드 설명
GetDateTime 지정된 열 값을 DateTime 구조체로 검색합니다.
GetDateTimeOffset 지정된 열 값을 DateTimeOffset 구조체로 검색합니다.
GetProviderSpecificFieldType 필드에 대해 기본 공급자별 형식인 형식을 반환합니다. 새 날짜 및 시간 형식의 경우 GetFieldType과 동일한 형식을 반환합니다.
GetProviderSpecificValue 지정된 열의 값을 검색합니다. 새 날짜 및 시간 형식의 경우 GetValue와 동일한 형식을 반환합니다.
GetProviderSpecificValues 지정된 배열의 값을 검색합니다.
GetSqlString 열 값을 SqlString으로 검색합니다. 데이터를 InvalidCastException으로 표현할 수 없으면 SqlString이 발생합니다.
GetSqlValue 열 데이터를 해당 기본 SqlDbType으로 검색합니다. 새 날짜 및 시간 형식의 경우 GetValue와 동일한 형식을 반환합니다.
GetSqlValues 지정된 배열의 값을 검색합니다.
GetString Type System Version이 SQL Server 2005로 설정되어 있는 경우 열 값을 문자열로 검색합니다. 데이터를 문자열로 표현할 수 없으면 InvalidCastException이 발생합니다.
GetTimeSpan 지정된 열 값을 TimeSpan 구조체로 검색합니다.
GetValue 지정된 열 값을 기본 CLR 형식으로 검색합니다.
GetValues 배열의 열 값을 검색합니다.
GetSchemaTable 결과 집합의 메타데이터를 설명하는 DataTable을 반환합니다.

참고 항목

SQL Server에서 in-process로 실행되는 코드에는 새 날짜 및 시간 SqlDbTypes이 지원되지 않습니다. 이러한 형식 중 하나를 서버에 전달하면 예외가 발생합니다.

날짜 및 시간 값을 리터럴로 지정

여러 가지 리터럴 문자열 형식을 사용하여 날짜 및 시간 데이터 형식을 지정할 수 있습니다. 이렇게 하면 SQL Server에서는 이러한 리터럴 문자열 형식을 런타임에 평가하여 내부 날짜/시간 구조체로 변환합니다. SQL Server는 작은따옴표(')로 묶인 날짜 및 시간 데이터를 인식합니다. 다음 예제에서는 몇 가지 형식을 보여 줍니다.

  • 'October 15, 2006'과 같은 알파벳 날짜 형식

  • '10/15/2006'과 같은 숫자 날짜 형식

  • '20061015'와 같은 구분되지 않은 문자열 형식(ISO 표준 날짜 형식을 사용하는 경우 2006년 10월 15일로 해석됨).

0보다 작거나 24시간보다 크거나 같은 시간 값은 ArgumentException을 throw합니다.

SQL Server 문서 리소스

SQL Server에서 날짜 및 시간 값 작업에 대한 자세한 내용은 다음 문서를 참조하세요.

아티클 설명
날짜 및 시간 데이터 형식 및 함수(Transact-SQL) 모든 Transact-SQL 날짜 및 시간 데이터 형식 및 함수에 대한 개요를 제공합니다.
날짜 및 시간 데이터 사용 날짜 및 시간 데이터 형식 및 함수에 관한 정보와 사용 예제를 제공합니다.
데이터 형식(Transact-SQL) SQL Server에 제공되는 시스템 데이터 형식에 대해 설명합니다.

참고 항목