diff --git a/be/src/exprs/string_functions.cpp b/be/src/exprs/string_functions.cpp index 262e7f0bb7..26486cdd96 100644 --- a/be/src/exprs/string_functions.cpp +++ b/be/src/exprs/string_functions.cpp @@ -69,7 +69,7 @@ StringVal StringFunctions::substring(FunctionContext* context, const StringVal& if (str.is_null || pos.is_null || len.is_null || pos.val > str.len) { return StringVal::null(); } - if (len.val <= 0 || str.len == 0) { + if (len.val <= 0 || str.len == 0 || pos.val == 0) { return StringVal(); } diff --git a/be/test/exprs/string_functions_test.cpp b/be/test/exprs/string_functions_test.cpp index 92c92e71e4..c0fd49f630 100644 --- a/be/test/exprs/string_functions_test.cpp +++ b/be/test/exprs/string_functions_test.cpp @@ -291,6 +291,9 @@ TEST_F(StringFunctionsTest, null_or_empty) { TEST_F(StringFunctionsTest, substring) { doris_udf::FunctionContext* context = new doris_udf::FunctionContext(); + + ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("")), + StringFunctions::substring(context, StringVal("hello word"), 0, 5)); ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("hello")), StringFunctions::substring(context, StringVal("hello word"), 1, 5));