diff --git a/src/sql/engine/expr/ob_expr_interval.cpp b/src/sql/engine/expr/ob_expr_interval.cpp index 328997188e..7e680f030e 100644 --- a/src/sql/engine/expr/ob_expr_interval.cpp +++ b/src/sql/engine/expr/ob_expr_interval.cpp @@ -122,23 +122,21 @@ int ObExprInterval::calc_interval_expr(const ObExpr &expr, ObEvalCtx &ctx, } else { int64_t high = expr.arg_cnt_ - 1; int64_t low = 1; - int64_t mid = 0; while (low <= high && OB_SUCC(ret)) { + int64_t mid = (low + high) / 2; const ObDatum &arg_i = expr.locate_param_datum(ctx, static_cast(mid)); - mid = (low + high + 1) / 2; if (OB_FAIL(cmp_func(arg_i, *arg0, cmp_ret))) { LOG_WARN("faile to compare", K(ret)); - } else if (cmp_ret > 0) { - high = mid - 1; - mid -= 1; + } else if (cmp_ret <= 0) { + low = mid + 1; } else if (low == high) { break; } else { - low = mid; + high = mid - 1; } } // while if (OB_SUCC(ret)) { - res.set_int(mid); + res.set_int(low - 1); } } }