Partager via


C en SQL : Intervalles de jours-heures

Les identificateurs des types de données ODBC C de l’intervalle de jour sont les suivants :

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

Le tableau suivant montre les types de données ODBC SQL vers lesquels les données d’intervalle C peuvent être converties. Pour obtenir une explication des colonnes et des termes de la table, consultez Conversion de données de C en types de données SQL.

Identificateur de type SQL Test SQLSTATE
SQL_CHAR[a]

SQL_VARCHAR[a]

SQL_LONGVARCHAR[a]
Longueur d’octet de >colonne = Longueur d’octet de caractère

Longueur d’octet < de colonne Longueur d’octet du caractère[a]

La valeur de données n’est pas un littéral d’intervalle valide
n/a

22001

22015
SQL_WCHAR[a]

SQL_WVARCHAR[a]

SQL_WLONGVARCHAR[a]
Longueur des caractères de >colonne = Longueur des caractères des données

Longueur des caractères < de colonne Longueur du caractère des données[a]

La valeur de données n’est pas un littéral d’intervalle valide
n/a

22001

22015
SQL_TINYINT[b]

SQL_SMALLINT[b] SQL_INTEGER[b]

SQL_BIGINT[b] SQL_NUMERIC[b]

SQL_DECIMAL[b]
La conversion d’un intervalle à champ unique n’a pas entraîné la troncation de chiffres entiers

La conversion a entraîné la troncation de chiffres entiers
n/a

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
La valeur des données a été convertie sans troncation des champs

Un ou plusieurs champs de valeur de données ont été tronqués pendant la conversion
n/a

22015

[a] Tous les types de données d’intervalle C peuvent être convertis en type de données caractère.

[b] Si le champ de type dans la structure d’intervalles est tel que l’intervalle est un champ unique (SQL_DAY, SQL_HOUR, SQL_MINUTE ou SQL_SECOND), le type C d’intervalle peut être converti en n’importe quel numérique exact (SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_DECIMAL ou SQL_NUMERIC).

La conversion par défaut d’un type C d’intervalle est en type SQL d’intervalle de jour correspondant.

Le pilote ignore la valeur de longueur/d’indicateur lors de la conversion des données du type de données interval C et suppose que la taille de la mémoire tampon de données correspond à la taille du type de données interval C. La valeur length/indicator est transmise dans l’argument StrLen_or_Ind dans SQLPutData et dans la mémoire tampon spécifiée avec l’argument StrLen_or_IndPtr dans SQLBindParameter. La mémoire tampon de données est spécifiée avec l’argument DataPtr dans SQLPutData et l’argument ParameterValuePtr dans SQLBindParameter.

L’exemple suivant montre comment envoyer des données C d’intervalle stockées dans la structure SQL_INTERVAL_STRUCT dans une colonne de base de données. La structure d’intervalles contient un intervalle DAY_TO_SECOND ; il sera stocké dans une colonne de base de données de type 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);