Compartir vía


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;