日期时间数据类型

在 ODBC 3.x 中,日期、时间和时间戳 SQL 数据类型的标识符已从 SQL_DATE、SQL_TIME 和 SQL_TIMESTAMP(头文件 9、10 和 11 中的 #define 实例)分别更改为 SQL_TYPE_DATE、SQL_TYPE_TIME 和 SQL_TYPE_TIMESTAMP(头文件 91、92 和 93 中的 #define 实例)。 相应的 C 类型标识符已从SQL_C_DATE、SQL_C_TIME和SQL_C_TIMESTAMP分别更改为SQL_C_TYPE_DATE、SQL_C_TYPE_TIME和SQL_C_TYPE_TIMESTAMP,#define 实例已相应地更改。

ODBC 3.x 中 SQL 日期时间数据类型返回的列大小和小数位数与 ODBC 2.x 中返回的精度和小数位数相同。 这些值不同于 SQL_DESC_PRECISION 和 SQL_DESC_SCALE 描述符字段中的值。 (有关详细信息,请参阅 附录 D 中的列大小、十进制数字、传输八进制数长度和显示大小 :数据类型。

这些更改会影响 SQLDescribeColSQLDescribeParamSQLColAttributes; SQLBindColSQLBindParameterSQLGetData;SQLColumnsSQLGetTypeInfoSQLProcedureColumnsSQLStatisticsSQLSpecialColumns

ODBC 3.x 驱动程序根据SQL_ATTR_ODBC_VERSION环境属性的设置处理上一段中列出的函数调用。 对于 SQLColumns、SQLGetTypeInfoSQLProcedureColumnsSQLSpecialColumnsSQLStatistics,如果SQL_ATTR_ODBC_VERSION设置为SQL_OV_ODBC3,则函数在DATA_TYPE字段中返回SQL_TYPE_DATE、SQL_TYPE_TIME和SQL_TYPE_TIMESTAMP。 COLUMN_SIZE列(SQLColumns、SQLGetTypeInfoSQLProcedureColumnsSQLSpecialColumns 返回的结果集中)包含近似数值类型的二进制精度。 如果SQL_ATTR_ODBC_VERSION设置为SQL_OV_ODBC2,则函数在DATA_TYPE字段中返回SQL_DATE、SQL_TIME和SQL_TIMESTAMP,COLUMN_SIZE列包含近似数值类型的十进制精度。

在调用 SQLGetTypeInfo 中请求所有数据类型时,函数返回的结果集将包含 ODBC 3.x 中定义的SQL_TYPE_DATE、SQL_TYPE_TIME和SQL_TYPE_TIMESTAMP,以及 ODBC 2.x 中定义的SQL_DATE、SQL_TIME和SQL_TIMESTAMP。

由于 ODBC 3.x 驱动程序管理器如何执行日期、时间和时间戳数据类型的映射,ODBC 3.x 驱动程序只需识别在 SQLBindCol和 SQLGetData的 TargetType 参数输入的日期、时间和时间戳 C 数据类型的 91、92 和 93 的 #defines, 并且只需要识别在 SQLBindParameter 参数输入的日期、时间和时间戳 SQL 数据类型的 91、92 和 93 的 #definesSQLGetTypeInfoDataType 参数。 有关详细信息,请参阅 Datetime 数据类型更改