Partager via


SQL à C : Intervalles de jours-heures

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

  • 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

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

Identificateur de type C Test *TargetValuePtr *StrLen_or_IndPtr SQLSTATE
Tous les types d’intervalleS C de jour Partie des champs de fin non tronquée

Partie tronquée des champs de fin

La précision de pointe de la cible n’est pas assez grande pour contenir des données provenant de la source
Données

Données tronquées

Indéfini
Longueur des données

Longueur des données

Indéfini
n/a

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 précision d’intervalle était un champ unique et les données ont été converties sans troncation

La précision d’intervalle était un champ unique et fractionné tronqué

La précision d’intervalle était un champ unique et tronqué

La précision d’intervalle n’était pas un seul champ
Données

Données tronquées

Données tronquées

Indéfini
Taille du type de données C

Longueur des données

Longueur des données

Taille du type de données C
n/a

01S07

22003

07006
SQL_C_BINARY Longueur d’octet des données <= BufferLength

Longueur d’octet de la mémoire tampon des données >
Données

Indéfini
Longueur des données

Indéfini
n/a

22003
SQL_C_CHAR Mémoire tampon de longueur <d’octet de caractère

Nombre de chiffres entiers (par opposition à des chiffres fractionnaires<) BufferLength

Nombre de chiffres entiers (par opposition à des chiffres fractionnaires >) = BufferLength
Données

Données tronquées

Indéfini
Taille du type de données C

Taille du type de données C

Indéfini
n/a

01004

22003
SQL_C_WCHAR Longueur de caractères <BufferLength

Nombre de chiffres entiers (par opposition à des chiffres fractionnaires<) BufferLength

Nombre de chiffres entiers (par opposition à des chiffres fractionnaires >) = BufferLength
Données

Données tronquées

Indéfini
Taille du type de données C

Taille du type de données C

Indéfini
n/a

01004

22003

[a] Un type SQL d’intervalle de jour peut être converti en n’importe quel type C d’intervalle de jour.

[b] Si la précision de l’intervalle est un seul champ (jour, heure, minute ou deuxième), le type SQL d’intervalle peut être converti en n’importe quel type numérique exact (SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG ou SQL_C_NUMERIC).

La conversion par défaut d’un type SQL d’intervalle est le type de données d’intervalle C correspondant. L’application lie ensuite la colonne ou le paramètre (ou définit le champ SQL_DESC_DATA_PTR dans l’enregistrement approprié de l’ARD) pour qu’il pointe vers la structure SQL_INTERVAL_STRUCT initialisée (ou passe un pointeur vers la structure SQL_ INTERVAL_STRUCT en tant qu’argument TargetValuePtr dans un appel à SQLGetData).

L’exemple suivant montre comment transférer des données d’une colonne de type SQL_INTERVAL_DAY_TO_MINUTE vers la structure de SQL_INTERVAL_STRUCT afin qu’elles reviennent sous forme d’intervalle 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;