从 SQL 到 C:年月间隔

年月间隔 ODBC SQL 数据类型的标识符如下:

  • SQL_INTERVAL_MONTH
  • SQL_INTERVAL_YEAR
  • SQL_INTERVAL_YEAR_TO_MONTH

下表显示了可将年月间隔 SQL 数据转换为的 ODBC C 数据类型。 有关表中的列和术语的说明,请参阅 将数据从 SQL 转换为 C 数据类型

C 类型标识符 测试 TargetValuePtr StrLen_or_IndPtr SQLSTATE
SQL_C_INTERVAL_MONTH[a]

SQL_C_INTERVAL_YEAR[a]

SQL_C_INTERVAL_YEAR_TO_MONTH[a]
尾随字段部分未截断

尾随字段部分截断

目标前导精度不足以保存源中的数据
数据

截断的数据

Undefined
数据长度(以字节为单位)

数据长度(以字节为单位)

Undefined
不适用

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]
间隔精度为单个字段,转换数据时未截断

间隔精度是单个字段,截断了整个

间隔精度不是单个字段
数据

截断的数据

Undefined
C 数据类型的大小

数据长度(以字节为单位)

C 数据类型的大小
不适用

22003

22015
SQL_C_BINARY 数据的 <字节长度 = BufferLength

数据 >BufferLength 的字节长度
数据

Undefined
数据长度(以字节为单位)

Undefined
不适用

22003
SQL_C_CHAR 字符字节长度 <BufferLength

整 (数,而不是小数) 位数 <BufferLength

与小数) 位数 >相比,整个 (数 = BufferLength
数据

截断的数据

Undefined
C 数据类型的大小

C 数据类型的大小

Undefined
不适用

01004

22003
SQL_C_WCHAR 字符长度 <BufferLength

整 (数,而不是小数) 位数 <BufferLength

与小数) 位数 >相比,整个 (数 = BufferLength
数据

截断的数据

Undefined
C 数据类型的大小

C 数据类型的大小

Undefined
不适用

01004

22003

[a] 年月间隔 SQL 类型可以转换为任何年月间隔 C 类型。

[b] 如果间隔精度是 YEAR 或 MONTH) 之一 (单个字段,则可以将间隔 SQL 类型转换为任何精确的数值 (SQL_C_STINYINT、SQL_C_UTINYINT、SQL_C_USHORT、SQL_C_SHORT、SQL_C_SLONG、SQL_C_ULONG或SQL_C_NUMERIC) 。

默认转换

间隔 SQL 类型的默认转换是到相应的 C 间隔数据类型。 然后,应用程序 (绑定列或参数,或设置 ARD) 适当记录中的SQL_DESC_DATA_PTR字段,以指向初始化的 SQL_INTERVAL_STRUCT 结构 (,或在调用 SQLGetData) 时将指向 SQL_ INTERVAL_STRUCT 结构的指针作为 TargetValuePtr 参数传递。