SQL a C: Intervalos de día y hora
Los identificadores de los tipos de datos DE SQL ODBC de intervalo de día son los siguientes:
- 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
En la tabla siguiente se muestran los tipos de datos ODBC C a los que se pueden convertir los datos SQL del intervalo de tiempo de día. Para obtener una explicación de las columnas y los términos de la tabla, vea Convertir datos de SQL a tipos de datos de C.
Identificador de tipo C | Prueba | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
Todos los tipos de intervalo de C de día | Parte de campos finales no truncada Parte de campos finales truncada La precisión inicial del destino no es lo suficientemente grande como para contener datos del origen |
data Datos truncados No definido |
Longitud de los datos Longitud de los datos No definido |
N/D 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] | La precisión del intervalo era un único campo y los datos se convirtieron sin truncamiento La precisión del intervalo era un campo único y fracciones truncadas La precisión del intervalo era un único campo y todo truncado La precisión del intervalo no era un único campo |
data Datos truncados Datos truncados No definido |
Tamaño del tipo de datos de C Longitud de los datos Longitud de los datos Tamaño del tipo de datos de C |
N/D 01S07 22003 07006 |
SQL_C_BINARY | Longitud de bytes de datos <= BufferLength Longitud de bytes de BufferLength de datos > |
data No definido |
Longitud de los datos No definido |
N/D 22003 |
SQL_C_CHAR | BufferLength de longitud < de bytes de caracteres Número de dígitos enteros < (en lugar de fracciones) BufferLength Número de dígitos enteros >(en lugar de fracciones) = BufferLength |
data Datos truncados No definido |
Tamaño del tipo de datos de C Tamaño del tipo de datos de C No definido |
N/D 01004 22003 |
SQL_C_WCHAR | BufferLength de longitud < de caracteres Número de dígitos enteros < (en lugar de fracciones) BufferLength Número de dígitos enteros >(en lugar de fracciones) = BufferLength |
data Datos truncados No definido |
Tamaño del tipo de datos de C Tamaño del tipo de datos de C No definido |
N/D 01004 22003 |
[a] Un tipo SQL de intervalo de tiempo de día se puede convertir en cualquier tipo de C de intervalo de tiempo de día.
[b] Si la precisión del intervalo es un único campo (uno de DAY, HOUR, MINUTE o SECOND), el tipo SQL de intervalo se puede convertir en cualquier numérico exacto (SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG o SQL_C_NUMERIC).
La conversión predeterminada de un tipo SQL de intervalo es para el tipo de datos de intervalo de C correspondiente. A continuación, la aplicación enlaza la columna o el parámetro (o establece el campo SQL_DESC_DATA_PTR en el registro adecuado del ARD) para que apunte a la estructura de SQL_INTERVAL_STRUCT inicializada (o pasa un puntero a la estructura SQL_ INTERVAL_STRUCT como el argumento TargetValuePtr en una llamada a SQLGetData).
En el ejemplo siguiente se muestra cómo transferir datos de una columna de tipo SQL_INTERVAL_DAY_TO_MINUTE a la estructura SQL_INTERVAL_STRUCT de modo que vuelva como un intervalo de 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;