Преобразование из C в SQL: интервалы времени дня
Идентификаторы для типов данных ODBC C дневного времени:
SQL_C_INTERVAL_DAY
SQL_C_INTERVAL_HOUR
SQL_C_INTERVAL_MINUTE
SQL_C_INTERVAL_SECOND
SQL_C_INTERVAL_DAY_TO_HOUR
SQL_C_INTERVAL_DAY_TO_MINUTE
SQL_C_INTERVAL_DAY_TO_SECOND
SQL_C_INTERVAL_HOUR_TO_MINUTE
SQL_C_INTERVAL_HOUR_TO_SECOND
SQL_C_INTERVAL_MINUTE_TO_SECOND
В следующей таблице показаны типы данных SQL ODBC, в которые могут быть преобразованы данные C интервала. Описание столбцов и терминов в таблице см. в разделе "Преобразование данных из C в типы данных SQL".
Идентификатор типа SQL | Тест | SQLSTATE |
---|---|---|
SQL_CHAR[a] SQL_VARCHAR[a] SQL_LONGVARCHAR[a] |
Длина байтов столбца = длина >байтов символа Длина байтов столбца "Длина < байтов" [a] Значение данных не является допустимым литералом интервала |
Недоступно 22001 22015 |
SQL_WCHAR[a] SQL_WVARCHAR[a] SQL_WLONGVARCHAR[a] |
Длина символа столбца = длина >символов данных Длина символа столбца для символов < данных[a] Значение данных не является допустимым литералом интервала |
Недоступно 22001 22015 |
SQL_TINYINT[b] SQL_SMALLINT[b] SQL_INTEGER[b] SQL_BIGINT[b] SQL_NUMERIC[b] SQL_DECIMAL[b] |
Преобразование интервала с одним полем не привело к усечению целых цифр Преобразование привело к усечению целых цифр |
Недоступно 22003 |
SQL_INTERVAL_DAY SQL_INTERVAL_HOUR SQL_INTERVAL_MINUTE SQL_INTERVAL_SECOND SQL_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND |
Значение данных было преобразовано без усечения полей Одно или несколько полей значения данных были усечены во время преобразования |
Недоступно 22015 |
[a] Все типы данных интервала C можно преобразовать в тип данных символов.
[b] Если поле типа в структуре интервала соответствует одному полю (SQL_DAY, SQL_HOUR, SQL_MINUTE или SQL_SECOND), тип интервала C можно преобразовать в любое точное число (SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT SQL_INTEGER, SQL_DECIMAL или SQL_NUMERIC).
Преобразование по умолчанию типа C интервала — это соответствующий тип интервала ВРЕМЕНИ SQL.
Драйвер игнорирует значение длины или индикатора при преобразовании данных из типа данных C интервала C и предполагает, что размер буфера данных — это размер типа данных C интервала C. Значение длины или индикатора передается в аргументе StrLen_or_Ind в SQLPutData и в буфере, указанном с аргументом StrLen_or_IndPtr в SQLBindParameter. Буфер данных указывается с аргументом DataPtr в SQLPutData и аргументом ParameterValuePtr в SQLBindParameter.
В следующем примере показано, как отправлять данные интервала C, хранящиеся в структуре SQL_INTERVAL_STRUCT в столбец базы данных. Структура интервала содержит интервал DAY_TO_SECOND; Он будет храниться в столбце базы данных типа SQL_INTERVAL_DAY_TO_MINUTE.
SQL_INTERVAL_STRUCT is;
SQLINTEGER cbValue;
// Initialize the interval struct to contain the DAY_TO_SECOND
// interval "154 days, 22 hours, 44 minutes, and 10 seconds"
is.intval.day_second.day = 154;
is.intval.day_second.hour = 22;
is.intval.day_second.minute = 44;
is.intval.day_second.second = 10;
is.interval_sign = SQL_FALSE;
// Bind the dynamic parameter
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_INTERVAL_DAY_TO_SECOND,
SQL_INTERVAL_DAY_TO_MINUTE, 0, 0, &is,
sizeof(SQL_INTERVAL_STRUCT), &cbValue);
// Execute an insert statement; "interval_column" is a column
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.
SQLExecDirect(hstmt,"INSERT INTO table(interval_column) VALUES (?)",SQL_NTS);