The data types listed in the “SQL Data Types” and “C Data Types” sections earlier in this appendix are “concise” data types: Each identifier refers to a single data type. There is a one-to-one correspondence between the identifier and the data type. Descriptors, however, do not in all cases use a single value to identify data types. In some cases, they use a “verbose” data type, and a type subcode. For all data types except datetime and interval data types, the verbose type identifier is the same as the concise type identifier and the value in SQL_DESC_DATETIME_INTERVAL_CODE is equal to 0. For datetime and interval data types, however, a verbose type (SQL_DATETIME or SQL_INTERVAL) is stored in SQL_DESC_TYPE, a concise type is stored in SQL_DESC_CONCISE_TYPE, and a subcode for each concise type is stored in SQL_DESC_DATETIME_INTERVAL_CODE. Setting one of these fields affects the others. For more information about these fields, see the SQLSetDescField function description.
When the SQL_DESC_TYPE or SQL_DESC_CONCISE_TYPE field is set for some data types, the SQL_DESC_DATETIME_INTERVAL_PRECISION, SQL_DESC_LENGTH, SQL_DESC_PRECISION, and SQL_DESC_SCALE fields are automatically set to default values, as applicable for the data type. For more information, see the description of the SQL_DESC_TYPE field in SQLSetDescField. If any of the default values set is not appropriate, the application should explicitly set the descriptor field through a call to SQLSetDescField.
The following table shows the concise type identifier, verbose type identifier, and type subcode for each datetime and interval SQL and C type identifier. As this table indicates, for datetime and interval data types the SQL_DESC_TYPE and SQL_DESC_DATETIME_INTERVAL_CODE fields have the same manifest constants for both SQL data types (in implementation descriptors) and C data types (in application descriptors).
Concise SQL type | Concise C type | Verbose Type | DATETIME_INTERVAL_CODE |
SQL_TYPE_DATE | SQL_C_TYPE_DATE | SQL_DATETIME | SQL_CODE_DATE |
SQL_TYPE_TIME | SQL_C_TYPE_TIME | SQL_DATETIME | SQL_CODE_TIME |
SQL_TYPE_TIMESTAMP | SQL_C_TYPE_ TIMESTAMP |
SQL_DATETIME | SQL_CODE_TIMESTAMP |
SQL_INTERVAL_ MONTH |
SQL_C_INTERVAL_ MONTH |
SQL_INTERVAL | SQL_CODE_MONTH |
SQL_INTERVAL_YEAR | SQL_C_INTERVAL_ YEAR |
SQL_INTERVAL | SQL_CODE_YEAR |
SQL_INTERVAL_YEAR_ TO_MONTH |
SQL_C_INTERVAL_ YEAR_TO_MONTH |
SQL_INTERVAL | SQL_CODE_YEAR_ TO_MONTH |
SQL_INTERVAL_DAY | SQL_C_INTERVAL_ DAY |
SQL_INTERVAL | SQL_CODE_DAY |
SQL_INTERVAL_HOUR | SQL_C_INTERVAL_ HOUR |
SQL_INTERVAL | SQL_CODE_HOUR |
SQL_INTERVAL_ MINUTE |
SQL_C_INTERVAL_ MINUTE |
SQL_INTERVAL | SQL_CODE_MINUTE |
SQL_INTERVAL_ SECOND |
SQL_C_INTERVAL_ SECOND |
SQL_INTERVAL | SQL_CODE_SECOND |
SQL_INTERVAL_DAY_ TO_HOUR |
SQL_C_INTERVAL_ DAY_TO_HOUR |
SQL_INTERVAL | SQL_CODE_DAY_TO_ HOUR |
SQL_INTERVAL_DAY_ TO_MINUTE |
SQL_C_INTERVAL_ DAY_TO_MINUTE |
SQL_INTERVAL | SQL_CODE_DAY_TO_ MINUTE |
SQL_INTERVAL_DAY_ TO_SECOND |
SQL_C_INTERVAL_ DAY_TO_SECOND |
SQL_INTERVAL | SQL_CODE_DAY_TO_ SECOND |
SQL_INTERVAL_ HOUR_TO_MINUTE |
SQL_C_INTERVAL_ HOUR_TO_MINUTE |
SQL_INTERVAL | SQL_CODE_HOUR_TO_ MINUTE |
SQL_INTERVAL_ HOUR_TO_SECOND |
SQL_C_INTERVAL_ HOUR_TO_SECOND |
SQL_INTERVAL | SQL_CODE_HOUR_TO_ SECOND |
SQL_INTERVAL_ MINUTE_TO_SECOND |
SQL_C_INTERVAL_ MINUTE_TO_SECOND |
SQL_INTERVAL | SQL_CODE_MINUTE_TO_ SECOND |