ORACLE Pro*C/C++ 代码未对结果进行舍入
ORACLE Pro*C/C++ code not rounding up results
我有一个名为 My_table
的数据库 table,其中有一个名为 timestamps
的列
包含以下数据。
12-May-19
12-Jun-09
12-Apr-08
当我使用此 sql 查询将此时间戳转换为自 1970 年以来:
SELECT (timestamps - to-date(197001010000, 'yyyymmddhhss)×864) from My_table;
它returns 一个向上舍入的整数,如 ORACLE SQLPLUS 终端上预期的 1459600。但是,如果我在将数据类型正确设置为整数 (selectda-T(i) = 2) 的 ORACLE Pro*C/C++ 动态代码中执行相同的查询,它不会对结果进行舍入,它只截断结果。
如何让它的行为与在 ORACLE SQLPLUS 终端上的行为完全相同?
是的,如果你 check the spec,Oracle 说
INTEGER ... On output, if the column value is a real number, Oracle truncates any fractional part.
所以如果你想要你的整数四舍五入,你必须在 SQL 中自己做,例如
SELECT round(timestamps - to-date(197001010000, 'yyyymmddhhss')×864) from My_table;
我有一个名为 My_table
的数据库 table,其中有一个名为 timestamps
的列
包含以下数据。
12-May-19
12-Jun-09
12-Apr-08
当我使用此 sql 查询将此时间戳转换为自 1970 年以来:
SELECT (timestamps - to-date(197001010000, 'yyyymmddhhss)×864) from My_table;
它returns 一个向上舍入的整数,如 ORACLE SQLPLUS 终端上预期的 1459600。但是,如果我在将数据类型正确设置为整数 (selectda-T(i) = 2) 的 ORACLE Pro*C/C++ 动态代码中执行相同的查询,它不会对结果进行舍入,它只截断结果。
如何让它的行为与在 ORACLE SQLPLUS 终端上的行为完全相同?
是的,如果你 check the spec,Oracle 说
INTEGER ... On output, if the column value is a real number, Oracle truncates any fractional part.
所以如果你想要你的整数四舍五入,你必须在 SQL 中自己做,例如
SELECT round(timestamps - to-date(197001010000, 'yyyymmddhhss')×864) from My_table;