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;