다음을 통해 공유


SQL에서 C로: 날짜-시간 간격

일별 간격 ODBC SQL 데이터 형식의 식별자는 다음과 같습니다.

  • SQL_INTERVAL_DAY
  • SQL_INTERVAL_DAY_TO_MINUTE
  • SQL_INTERVAL_HOUR
  • SQL_INTERVAL_DAY_TO_SECOND
  • SQL_INTERVAL_MINUTE
  • SQL_INTERVAL_HOUR_TO_MINUTE
  • SQL_INTERVAL_SECOND
  • SQL_INTERVAL_HOUR_TO_SECOND
  • SQL_INTERVAL_DAY_TO_HOUR
  • SQL_INTERVAL_MINUTE_TO_SECOND

다음 표에서는 요일 간격 SQL 데이터를 변환할 수 있는 ODBC C 데이터 형식을 보여줍니다. 테이블의 열 및 용어에 대한 설명은 SQL에서 C 데이터 형식으로 데이터 변환을 참조 하세요.

C 형식 식별자 테스트 *TargetValuePtr *StrLen_or_IndPtr SQLSTATE
모든 요일 C 간격 형식 후행 필드 부분이 잘리지 않음

잘린 후행 필드 부분

대상의 선행 정밀도는 원본의 데이터를 보유할 만큼 크지 않습니다.
데이터

잘린 데이터

Undefined
데이터 길이

데이터 길이

Undefined
해당 없음

01S07

22015
SQL_C_STINYINT[b] SQL_C_UTINYINT[b] SQL_C_USHORT[b] SQL_C_SHORT[b] SQL_C_SLONG[b] SQL_C_ULONG[b] SQL_C_NUMERIC[b] SQL_C_BIGINT[b] 간격 정밀도는 단일 필드였고 데이터는 잘림 없이 변환되었습니다.

간격 정밀도는 단일 필드였고 소수 자릿수가 잘렸습니다.

간격 정밀도는 단일 필드이고 전체 잘림

간격 정밀도가 단일 필드가 아니었습니다.
데이터

잘린 데이터

잘린 데이터

Undefined
C 데이터 형식의 크기

데이터 길이

데이터 길이

C 데이터 형식의 크기
해당 없음

01S07

22003

07006
SQL_C_BINARY 데이터의 <바이트 길이 = BufferLength

Data >BufferLength의 바이트 길이
데이터

Undefined
데이터 길이

Undefined
해당 없음

22003
SQL_C_CHAR 문자 바이트 길이 <BufferLength

전체(소수 자릿수가 아님) 숫자 BufferLength의 <

소수 자릿수가 아닌 전체 숫자 >= BufferLength
데이터

잘린 데이터

Undefined
C 데이터 형식의 크기

C 데이터 형식의 크기

Undefined
해당 없음

01004

22003
SQL_C_WCHAR 문자 길이 <BufferLength

전체(소수 자릿수가 아님) 숫자 BufferLength의 <

소수 자릿수가 아닌 전체 숫자 >= BufferLength
데이터

잘린 데이터

Undefined
C 데이터 형식의 크기

C 데이터 형식의 크기

Undefined
해당 없음

01004

22003

[a] 일별 간격 SQL 형식은 모든 일 시간 간격 C 형식으로 변환할 수 있습니다.

[b] 간격 전체 자릿수가 단일 필드(DAY, HOUR, MINUTE 또는 SECOND 중 하나)인 경우 간격 SQL 형식을 정확한 숫자(SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG 또는 SQL_C_NUMERIC)로 변환할 수 있습니다.

간격 SQL 형식의 기본 변환은 해당 C 간격 데이터 형식으로 변환됩니다. 그런 다음 애플리케이션은 열 또는 매개 변수(또는 ARD의 적절한 레코드에서 SQL_DESC_DATA_PTR 필드를 설정)를 바인딩하여 초기화된 SQL_INTERVAL_STRUCT 구조를 가리키거나 SQLGetData 호출에서 SQL_ INTERVAL_STRUCT 구조체에 대한 포인터를 TargetValuePtr 인수로 전달합니다.

다음 예제에서는 SQL_INTERVAL_DAY_TO_MINUTE 형식의 열에서 SQL_INTERVAL_STRUCT 구조로 데이터를 전송하여 DAY_TO_HOUR 간격으로 다시 가져오는 방법을 보여 줍니다.

SQL_INTERVAL_STRUCT is;  
SQLINTEGER    cbValue;  
SQLUINTEGER   days, hours;  
  
// Execute a select statement; "interval_column" is a column  
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.  
SQLExecDirect(hstmt, "SELECT interval_column FROM table", SQL_NTS);  
  
// Bind  
SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_MINUTE, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue);  
  
// Fetch  
SQLFetch(hstmt);  
  
// Process data  
days = is.intval.day_second.day;  
hours = is.intval.day_second.hour;