Преобразование данных из 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
В следующей таблице показаны типы данных ODBC C, в которые могут быть преобразованы данные SQL с интервалом дня. Описание столбцов и терминов в таблице см. в разделе "Преобразование данных из SQL в типы данных C".
Идентификатор типа C | Тест | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
Типы интервалов C в день | Часть конечных полей не усечена Конечные поля усечены Начальная точность целевого объекта недостаточно велика, чтобы хранить данные из источника |
Data Усеченные данные 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] | Точность интервала была одним полем, и данные были преобразованы без усечения Точность интервала была одним полем и усеченной дробной Точность интервала была одним полем и усеченным целым Точность интервала не была одним полем |
Data Усеченные данные Усеченные данные Undefined |
Размер типа данных C Длина данных Длина данных Размер типа данных C |
Недоступно 01S07 22003 07006 |
SQL_C_BINARY | Длина байтов данных <= BufferLength Длина байтов данных >BufferLength |
Data Undefined |
Длина данных Undefined |
Недоступно 22003 |
SQL_C_CHAR | Длина <байтов символа BufferLength Число целых (в отличие от дробных) цифр <BufferLength Число целых (в отличие от дробных) цифр >= BufferLength |
Data Усеченные данные Undefined |
Размер типа данных C Размер типа данных C Undefined |
Недоступно 01004 22003 |
SQL_C_WCHAR | Буфер длины <символа BufferLength Число целых (в отличие от дробных) цифр <BufferLength Число целых (в отличие от дробных) цифр >= BufferLength |
Data Усеченные данные Undefined |
Размер типа данных C Размер типа данных C Undefined |
Недоступно 01004 22003 |
[a] Тип SQL-интервала дня можно преобразовать в любой тип интервала в день.
[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. Затем приложение привязывает столбец или параметр (или задает поле SQL_DESC_DATA_PTR в соответствующей записи ARD), чтобы указать на инициализированную SQL_INTERVAL_STRUCT структуру (или передает указатель на структуру SQL_ INTERVAL_STRUCT в качестве аргумента TargetValuePtr в вызове SQLGetData).
В следующем примере показано, как передавать данные из столбца типа 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;