【问题标题】:ORACLE Pro*C/C++ code not rounding up resultsORACLE Pro*C/C++ 代码未对结果进行四舍五入
【发布时间】:2019-01-31 20:26:31
【问题描述】:

我有一个名为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 终端上的行为完全相同?

【问题讨论】:

    标签: sql c oracle oracle-pro-c


    【解决方案1】:

    是的,如果你 check the spec,甲骨文说

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

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

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

    【讨论】:

    • 请问这种 ORACLE 截断只发生在执行 pro*c/c++ 代码时吗?因为在 SQLPLUS 终端上,它会向上取整到最接近的整数。
    • 是的,这是截断整数的 ProC 预编译器。在 SQLPlus 中默认数字格式可以配置为SET NUMFORMAT,但在 ProC 中我认为不能修改。
    • 非常感谢您的解释,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2011-12-12
    • 2019-06-29
    相关资源
    最近更新 更多