首页 > 解决方案 > ORACLE Pro*C/C++ 代码未对结果进行四舍五入

问题描述

我有一个名为的数据库表,其中包含一个名为My_table的列timestamps,其中包含以下数据。

12-May-19
12-Jun-09
12-Apr-08

当我使用此 sql 查询将此时间戳转换为自 1970 年以来:

SELECT (timestamps - to-date(197001010000, 'yyyymmddhhss)×864) from My_table;

它返回一个四舍五入的整数,如 ORACLE SQLPLUS 终端上预期的 1459600。但是,如果我在 ORACLE Pro*C/C++ 动态代码中执行相同的查询,将数据类型正确设置为整数 (selectda-T(i) = 2),它不会对结果进行四舍五入,只会截断结果.

我怎样才能让它的行为与在 ORACLE SQLPLUS 终端上的行为完全相同?

标签: sqlcoracleoracle-pro-c

解决方案


是的,如果你检查规范,甲骨文说

INTEGER ... 在输出时,如果列值是实数,Oracle 会截断任何小数部分。

所以如果你想要你的整数四舍五入,你必须在 SQL 中自己做,例如

SELECT round(timestamps - to-date(197001010000, 'yyyymmddhhss')×864) from My_table;

推荐阅读