Преобразование данных из 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;