当从数据库的列中获取数据时, 如果接受数据的变量类型,与数据库中列类型相比, 不是ESQL/C定义的不需要转换的类型, ESQL/C将会进行数据类型的转换。插入数据时,也会进行类似的处理。只有在必要时, ESQL/C才进行数据类型的转换。
1. 在numeric类型和字符串类型间转换
在ESQL/C在进行数据转换之前,必须确认转换时有意义的。
下面的表格列出了在numeric类型与字符串类型之间可能的转换, 在下面的表格中,N代表 numeric数据类型,例如DECIMAL,FLOAT,或者SMALLINT,C代表字符串数据类型,例如CHAR, VARCHAR.
如果不可能进行转换, 或者是因为没有意义,或者是因为目标变量的值范围太小,不能够接收转换后的值。
转换方式 | 问题 | 结果 |
C C | 长度不适合 | ESQL/C会截取字符串,设定警告信息,并且设定原始字符串的长度。 |
N C | 可以 | ESQL/C为numeric类型创建字符串,使用指数形式来表现过大或过小的数值。 |
N C | 长度不合适 | ESQL/C使用多个“*”填充字符串,设定警告信息。 如果是小数部分超长,会进行舍入。如果整数部分超长,以“*”填充。 |
C N | 可以 | ESQL/C根据字符串的格式确定numeric的数据类型,如果字符串包含小数点,ESQL/C将其转换为decimal类型。 |
C N | 不是数据类型 | 数值为未定义,ESQL/C设定出错信息。 |
C N | 溢出 | 数值为未定义,ESQL/C设定出错信息。 |
N N | 长度不合适 | ESQL/C将数值转换为新的类型,如果发生错误,设定出错信息 |
N N | 溢出 | 数值为未定义,ESQL/C设定出错信息。 |
2. 将浮点类型的数字转换成字符串
ESQL/C自动将浮点类型值(DECIMAL(n), FLOAT, SMALLFOAT)在数据库列和字符类型(char,varchar, string,fixchar)之间进行转换。当将浮点类型值向字符串转换时,如果字符串的buffer不是足够大,ESQL/C将对浮点类型进行舍入,之后在进行转换。
3. 将BOOLEAN类型转换为字符串
数据库服务器自动将将BOOLEAN类型的值在数据库列和fixchar类型之间转换。
‘\01’<=> ‘T’
‘\00’<=> ‘F’
4. 转换DATETIME和INTERVAL值
数据库服务器自动将将DATETIME和INTERVAL类型的值在数据库列和字符串类型,例如(char,string,fixchar)类型之间转换。
可以调用ESQL/C库函数转换DATE和DATETIME类型的值。
5. 在VARCHAR和字符数据之间进行转换
数据库服务器自动将将VARCHAR类型的值在数据库列和char, string,fixchar类型之间转换。