Compartir vía


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);