이 항목에서는 SQL Server 2008 이상과 SQL Server Native Client OLE DB로 작성된 클라이언트 애플리케이션 간에 수행되는 날짜/시간 변환에 대해 설명합니다.
변환
다음 표에서는 클라이언트에 반환된 형식과 바인딩의 형식 간의 변환에 대해 설명합니다. 출력 매개 변수의 경우 ICommandWithParameters::SetParameterInfo가 호출되고 pwszDataSourceType 에 지정된 형식이 서버의 실제 형식과 일치하지 않으면 서버에서 암시적 변환이 수행되고 클라이언트로 반환되는 형식은 ICommandWithParameters::SetParameterInfo를 통해 지정된 형식과 일치합니다. 이로 인해 서버의 변환 규칙이 이 항목에 설명된 것과 다를 때 예기치 않은 변환 결과가 발생할 수 있습니다. 예를 들어 기본 날짜를 제공해야 하는 경우 SQL Server는 1899-12-30 대신 1900-1-1을 사용합니다.
| 받는 사람-> 부터 |
날짜 | DBDATE | DBTIME | DBTIME2 | DBTIMESTAMP | DBTIMESTAMPOFFSET (데이터베이스 타임스탬프 오프셋) | FILETIME | 바이트 | 변형 | SSVARIANT | BSTR | STR (주) | WSTR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 날짜 | 1,7 | 그래 | - | - | 1 | 1,3 | 1,7 | - | 확인(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| 시간 | 5,6,7 | - | 9 | 그래 | 6 | 3,6 | 5,6 | - | 확인(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Smalldatetime | 7 | 8 (여덟) | 9,10 | 10 | 그래 | 3 | 7 | - | 7(VT_DATE) | 그래 | 그래 | 4 | 4 |
| 날짜와 시간 | 5,7 | 8 (여덟) | 9,10 | 10 | 그래 | 3 | 7 | - | 7(VT_DATE) | 그래 | 그래 | 4 | 4 |
| Datetime2 (날짜 및 시간2) | 5,7 | 8 (여덟) | 9,10 | 10 | 7 | 3 | 5,7 | - | 확인(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Datetimeoffset | 5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | 그래 | 5,7,11 | - | 확인(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12,9 | 12 | 12 | 12 | 7,13 | 해당 없음(N/A) | 해당 없음(N/A) | 해당 없음(N/A) | 해당 없음(N/A) | 해당 없음(N/A) | 해당 없음(N/A) |
| Sql_variant (datetime) |
7 | 8 (여덟) | 9,10 | 10 | 그래 | 3 | 7 | - | 7(VT_DATE) | 그래 | 그래 | 4 | 4 |
| Sql_variant (smalldatetime) |
7 | 8 (여덟) | 9,10 | 10 | 그래 | 3 | 7 | - | 7(VT_DATE) | 그래 | 그래 | 4 | 4 |
| Sql_variant (date) |
1,7 | 그래 | 2 | 2 | 1 | 1,3 | 1,7 | - | OK(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Sql_variant (시간) |
5,6,7 | 2 | 6 | 그래 | 6 | 3,6 | 5,6 | - | OK(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Sql_variant (datetime2) |
5,7 | 8 (여덟) | 9,10 | 10 | 그래 | 3 | 5,7 | - | OK(VT_BSTR) | 그래 | 그래 | 4 | 4 |
| Sql_variant (datetimeoffset) |
5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | 그래 | 5,7,11 | - | OK(VT_BSTR) | 그래 | 그래 | 4 | 4 |
기호 설명
| 기호 | 의미 |
|---|---|
| 그래 | 변환이 필요하지 않습니다. |
| - | 변환이 지원되지 않습니다. IAccessor::CreateAccessor가 호출될 때 바인딩의 유효성이 검사되면 rgStatus에서 DBBINDSTATUS_UPSUPPORTEDCONVERSION 반환됩니다. 접근자 유효성 검사가 지연되면 DBSTATUS_E_BADACCESSOR 설정됩니다. |
| 1 | 시간 필드는 0으로 설정됩니다. |
| 2 | DBSTATUS_E_CANTCONVERTVALUE 설정됩니다. |
| 3 | 표준 시간대는 0으로 설정됩니다. |
| 4 | 클라이언트 버퍼가 충분히 크지 않으면 DBSTATUS_S_TRUNCATED 설정됩니다. 서버 형식에 소수 자릿수 초가 포함된 경우 결과 문자열의 자릿수는 서버 형식의 소수 자릿수와 정확히 일치합니다. |
| 5 | 초 또는 소수 자릿수 초의 잘림은 무시됩니다. |
| 6 | 원본이 문자열 시간 리터럴이고 대상이 DBTYPE_DATE 않는 한 날짜는 현재 날짜로 설정됩니다. 이 경우 1899-12-30이 사용됩니다. |
| 7 | 값이 오버플로되면 DBSTATUS_E_DATAOVERFLOW 설정됩니다. |
| 8 (여덟) | 시간 필드는 무시됩니다. |
| 9 | 소수 자릿수 초 필드는 무시됩니다. |
| 10 | 날짜 구성 요소가 무시됩니다. |
| 11 | 시간은 클라이언트 표준 시간대로 변환됩니다. 이 변환 중에 오류가 발생하면 DBSTATUS_E_DATAOVERFLOW 설정됩니다. |
| 12 | 문자열은 ISO 리터럴로 구문 분석되고 대상 형식으로 변환됩니다. 이 작업이 실패하면 문자열은 OLE 날짜 리터럴(시간 구성 요소도 포함)으로 구문 분석되고 OLE 날짜(DBTYPE_DATE)에서 대상 형식으로 변환됩니다. 문자열은 ISO 형식 구문 분석이 성공하도록 허용된 대상 형식의 리터럴에 대한 구문을 준수해야 합니다. OLE 구문 분석이 성공하려면 문자열이 OLE에서 인식하는 구문을 준수해야 합니다. 문자열을 구문 분석할 수 없으면 DBSTATUS_E_CANTCONVERTVALUE 설정됩니다. 구성 요소 값이 범위를 벗어나면 DBSTATUS_E_DATAOVERFLOW 설정됩니다. |
| 13 | 문자열은 ISO 리터럴로 구문 분석되고 대상 형식으로 변환됩니다. 이 작업이 실패하면 문자열은 OLE 날짜 리터럴(시간 구성 요소도 포함)으로 구문 분석되고 OLE 날짜(DBTYPE_DATE)에서 대상 형식으로 변환됩니다. 대상이 DBTYPE_DATE 또는 DBTYPE_DBTIMESTAMP 않는 한 문자열은 datetime 리터럴의 구문을 준수해야 합니다. 이 경우 ISO 형식 구문 분석이 성공하도록 datetime 또는 시간 리터럴이 허용됩니다. OLE 구문 분석이 성공하려면 문자열이 OLE에서 인식하는 구문을 준수해야 합니다. 문자열을 구문 분석할 수 없으면 DBSTATUS_E_CANTCONVERTVALUE 설정됩니다. 구성 요소 값이 범위를 벗어나면 DBSTATUS_E_DATAOVERFLOW 설정됩니다. |