diff --git a/be/src/exprs/string_functions.cpp b/be/src/exprs/string_functions.cpp index 6a5abaa3c66cb8..c1e813ac94be28 100644 --- a/be/src/exprs/string_functions.cpp +++ b/be/src/exprs/string_functions.cpp @@ -984,7 +984,7 @@ StringVal StringFunctions::split_part(FunctionContext* context, const StringVal& for (int i = 1; i <= field.val; i++) { // find int last_index = i - 1; find[last_index] = index_of(content.ptr, 0, content.len, delimiter.ptr, 0, delimiter.len, from); - from = find[last_index] + 1; + from = find[last_index] + delimiter.len; if (find[last_index] == -1) { break; } diff --git a/be/test/exprs/string_functions_test.cpp b/be/test/exprs/string_functions_test.cpp index 165ee79704287f..4c17d3f452ddc5 100644 --- a/be/test/exprs/string_functions_test.cpp +++ b/be/test/exprs/string_functions_test.cpp @@ -178,6 +178,10 @@ TEST_F(StringFunctionsTest, split_part) { ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("")), StringFunctions::split_part(context, StringVal("abcdabda"), StringVal("a"), 4)); + + ASSERT_EQ(AnyValUtil::from_string_temp(context, std::string("#123")), + StringFunctions::split_part(context, StringVal("abc###123###234"), StringVal("##"), 2)); + delete context; }