C a SQL: Intervalos de día y hora
Los identificadores de los tipos de datos ODBC C de intervalo de día son:
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
En la tabla siguiente se muestran los tipos de datos DE SQL ODBC en los que se pueden convertir los datos de C de intervalo. Para obtener una explicación de las columnas y los términos de la tabla, vea Convertir datos de C a tipos de datos SQL.
Identificador de tipo SQL | Prueba | SQLSTATE |
---|---|---|
SQL_CHAR[a] SQL_VARCHAR[a] SQL_LONGVARCHAR[a] |
Longitud >de bytes de columna = Longitud de bytes de caracteres Longitud < de bytes de columna Longitud de bytes de caracteres[a] El valor de datos no es un literal de intervalo válido |
N/D 22001 22015 |
SQL_WCHAR[a] SQL_WVARCHAR[a] SQL_WLONGVARCHAR[a] |
Longitud >de caracteres de columna = Longitud de caracteres de datos Longitud < de caracteres de columna Longitud de caracteres de datos[a] El valor de datos no es un literal de intervalo válido |
N/D 22001 22015 |
SQL_TINYINT[b] SQL_SMALLINT[b] SQL_INTEGER[b] SQL_BIGINT[b] SQL_NUMERIC[b] SQL_DECIMAL[b] |
La conversión de un intervalo de un solo campo no produjo el truncamiento de dígitos enteros La conversión produjo el truncamiento de dígitos enteros |
N/D 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 |
El valor de datos se convirtió sin truncar ningún campo Se truncaron uno o varios campos de valor de datos durante la conversión |
N/D 22015 |
[a] Todos los tipos de datos de intervalo de C se pueden convertir en un tipo de datos de caracteres.
[b] Si el campo de tipo de la estructura de intervalo es tal que el intervalo es un único campo (SQL_DAY, SQL_HOUR, SQL_MINUTE o SQL_SECOND), el tipo de intervalo C se puede convertir en cualquier numérico exacto (SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_DECIMAL o SQL_NUMERIC).
La conversión predeterminada de un tipo C de intervalo es para el tipo SQL de intervalo de día correspondiente.
El controlador omite el valor de longitud o indicador al convertir datos del tipo de datos de intervalo C y supone que el tamaño del búfer de datos es el tamaño del tipo de datos de intervalo C. El valor de longitud o indicador se pasa en el argumento StrLen_or_Ind en SQLPutData y en el búfer especificado con el argumento StrLen_or_IndPtr en SQLBindParameter. El búfer de datos se especifica con el argumento DataPtr en SQLPutData y el argumento ParameterValuePtr en SQLBindParameter.
En el ejemplo siguiente se muestra cómo enviar datos de intervalo C almacenados en la estructura de SQL_INTERVAL_STRUCT a una columna de base de datos. La estructura de intervalo contiene un intervalo de DAY_TO_SECOND; se almacenará en una columna de base de datos de tipo 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);