diff --git a/be/src/exprs/function/cast/cast_to_decimal.h b/be/src/exprs/function/cast/cast_to_decimal.h index 0617aca16ea014..8dc4c6b4aeac93 100644 --- a/be/src/exprs/function/cast/cast_to_decimal.h +++ b/be/src/exprs/function/cast/cast_to_decimal.h @@ -780,6 +780,17 @@ class CastToImpl : public CastToBase { params.is_strict = (CastMode == CastModeType::StrictMode); size_t size = vec_from.size(); + if constexpr (IsDataTypeDecimalV3) { + if (to_scale == 0 && !narrow_integral) { + for (size_t i = 0; i < size; i++) { + vec_to_data[i].value = + static_cast(vec_from_data[i]); + } + block.get_by_position(result).column = std::move(col_to); + return Status::OK(); + } + } + RETURN_IF_ERROR(std::visit( [&](auto multiply_may_overflow, auto narrow_integral) { for (size_t i = 0; i < size; i++) {