This is an automated email from the ASF dual-hosted git repository.

gabriellee pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 41947c73eb [Feature](array-function) Support array functions for 
nested type datev2 and datetimev2 (#16382)
41947c73eb is described below

commit 41947c73eb5fee54ff5258acb4a757538ac6990c
Author: abmdocrt <[email protected]>
AuthorDate: Wed Feb 8 12:51:07 2023 +0800

    [Feature](array-function) Support array functions for nested type datev2 
and datetimev2 (#16382)
---
 .../aggregate_function_collect.cpp                 |   4 +
 be/src/vec/data_types/data_type_time_v2.cpp        |  23 ++
 be/src/vec/data_types/data_type_time_v2.h          |   2 +
 .../vec/functions/array/function_array_distinct.h  |   6 +
 .../vec/functions/array/function_array_element.h   |   9 +
 be/src/vec/functions/array/function_array_index.h  |  17 ++
 be/src/vec/functions/array/function_array_join.h   |   6 +
 be/src/vec/functions/array/function_array_remove.h |  18 +-
 be/src/vec/functions/array/function_array_set.h    |   2 +
 be/src/vec/functions/array/function_array_sort.h   |   6 +
 .../vec/functions/array/function_arrays_overlap.h  |   8 +
 .../apache/doris/analysis/FunctionCallExpr.java    |  64 +++--
 gensrc/script/doris_builtins_functions.py          |  10 +
 .../test_array_aggregation_functions.out           |  28 +--
 .../array_functions/test_array_functions.out       | 259 ++++++++++++++++++++-
 .../test_array_functions_by_literal.out            |  96 ++++++++
 .../cast_function/test_cast_string_to_array.out    |   6 +
 .../test_array_aggregation_functions.groovy        |  16 +-
 .../array_functions/test_array_functions.groovy    |  48 +++-
 .../test_array_functions_by_literal.groovy         |  34 ++-
 .../cast_function/test_cast_string_to_array.groovy |   6 +
 21 files changed, 607 insertions(+), 61 deletions(-)

diff --git a/be/src/vec/aggregate_functions/aggregate_function_collect.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_collect.cpp
index b0e713c87f..c1937cc06e 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_collect.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_collect.cpp
@@ -76,6 +76,10 @@ AggregateFunctionPtr create_aggregate_function_collect(const 
std::string& name,
         return create_agg_function_collect<Int64>(distinct, argument_types);
     } else if (type.is_date_time()) {
         return create_agg_function_collect<Int64>(distinct, argument_types);
+    } else if (type.is_date_v2()) {
+        return create_agg_function_collect<UInt32>(distinct, argument_types);
+    } else if (type.is_date_time_v2()) {
+        return create_agg_function_collect<UInt64>(distinct, argument_types);
     } else if (type.is_string()) {
         return create_agg_function_collect<StringRef>(distinct, 
argument_types);
     }
diff --git a/be/src/vec/data_types/data_type_time_v2.cpp 
b/be/src/vec/data_types/data_type_time_v2.cpp
index ed52721ee7..a6405e1d5b 100644
--- a/be/src/vec/data_types/data_type_time_v2.cpp
+++ b/be/src/vec/data_types/data_type_time_v2.cpp
@@ -19,6 +19,7 @@
 
 #include "util/binary_cast.hpp"
 #include "vec/columns/columns_number.h"
+#include "vec/io/io_helper.h"
 #include "vec/runtime/vdatetime_value.h"
 
 namespace doris::vectorized {
@@ -48,6 +49,17 @@ void DataTypeDateV2::to_string(const IColumn& column, size_t 
row_num, BufferWrit
     ostr.write(buf, pos - buf - 1);
 }
 
+Status DataTypeDateV2::from_string(ReadBuffer& rb, IColumn* column) const {
+    auto* column_data = static_cast<ColumnUInt32*>(column);
+    UInt32 val = 0;
+    if (!read_date_v2_text_impl<UInt32>(val, rb)) {
+        return Status::InvalidArgument("parse date fail, string: '{}'",
+                                       std::string(rb.position(), 
rb.count()).c_str());
+    }
+    column_data->insert_value(val);
+    return Status::OK();
+}
+
 MutableColumnPtr DataTypeDateV2::create_column() const {
     return DataTypeNumberBase<UInt32>::create_column();
 }
@@ -110,6 +122,17 @@ void DataTypeDateTimeV2::to_string(const IColumn& column, 
size_t row_num,
     ostr.write(buf, pos - buf - 1);
 }
 
+Status DataTypeDateTimeV2::from_string(ReadBuffer& rb, IColumn* column) const {
+    auto* column_data = static_cast<ColumnUInt64*>(column);
+    UInt64 val = 0;
+    if (!read_datetime_v2_text_impl<UInt64>(val, rb)) {
+        return Status::InvalidArgument("parse date fail, string: '{}'",
+                                       std::string(rb.position(), 
rb.count()).c_str());
+    }
+    column_data->insert_value(val);
+    return Status::OK();
+}
+
 MutableColumnPtr DataTypeDateTimeV2::create_column() const {
     return DataTypeNumberBase<UInt64>::create_column();
 }
diff --git a/be/src/vec/data_types/data_type_time_v2.h 
b/be/src/vec/data_types/data_type_time_v2.h
index 236e0887ba..11ecaf91b8 100644
--- a/be/src/vec/data_types/data_type_time_v2.h
+++ b/be/src/vec/data_types/data_type_time_v2.h
@@ -37,6 +37,7 @@ public:
     bool equals(const IDataType& rhs) const override;
     std::string to_string(const IColumn& column, size_t row_num) const 
override;
     void to_string(const IColumn& column, size_t row_num, BufferWritable& 
ostr) const override;
+    Status from_string(ReadBuffer& rb, IColumn* column) const override;
 
     MutableColumnPtr create_column() const override;
 
@@ -74,6 +75,7 @@ public:
     bool equals(const IDataType& rhs) const override;
     std::string to_string(const IColumn& column, size_t row_num) const 
override;
     void to_string(const IColumn& column, size_t row_num, BufferWritable& 
ostr) const override;
+    Status from_string(ReadBuffer& rb, IColumn* column) const override;
 
     MutableColumnPtr create_column() const override;
 
diff --git a/be/src/vec/functions/array/function_array_distinct.h 
b/be/src/vec/functions/array/function_array_distinct.h
index 40e369e4ab..e19368d6df 100644
--- a/be/src/vec/functions/array/function_array_distinct.h
+++ b/be/src/vec/functions/array/function_array_distinct.h
@@ -259,6 +259,12 @@ private:
         } else if (which.is_date_time()) {
             res = _execute_number<ColumnDateTime>(src_column, src_offsets, 
dest_column,
                                                   dest_offsets, src_null_map, 
dest_null_map);
+        } else if (which.is_date_v2()) {
+            res = _execute_number<ColumnDateV2>(src_column, src_offsets, 
dest_column, dest_offsets,
+                                                src_null_map, dest_null_map);
+        } else if (which.is_date_time_v2()) {
+            res = _execute_number<ColumnDateTimeV2>(src_column, src_offsets, 
dest_column,
+                                                    dest_offsets, 
src_null_map, dest_null_map);
         } else if (which.is_decimal128()) {
             res = _execute_number<ColumnDecimal128>(src_column, src_offsets, 
dest_column,
                                                     dest_offsets, 
src_null_map, dest_null_map);
diff --git a/be/src/vec/functions/array/function_array_element.h 
b/be/src/vec/functions/array/function_array_element.h
index 6722e09e9c..1a68c68827 100644
--- a/be/src/vec/functions/array/function_array_element.h
+++ b/be/src/vec/functions/array/function_array_element.h
@@ -21,6 +21,7 @@
 
 #include <string_view>
 
+#include "vec/columns/column.h"
 #include "vec/columns/column_array.h"
 #include "vec/columns/column_const.h"
 #include "vec/columns/column_string.h"
@@ -203,6 +204,14 @@ private:
             res = _execute_number<ColumnDateTime>(offsets, *nested_column, 
src_null_map,
                                                   *arguments[1].column, 
nested_null_map,
                                                   dst_null_map);
+        } else if (check_column<ColumnDateV2>(nested_column)) {
+            res = _execute_number<ColumnDateV2>(offsets, *nested_column, 
src_null_map,
+                                                *arguments[1].column, 
nested_null_map,
+                                                dst_null_map);
+        } else if (check_column<ColumnDateTimeV2>(nested_column)) {
+            res = _execute_number<ColumnDateTime>(offsets, *nested_column, 
src_null_map,
+                                                  *arguments[1].column, 
nested_null_map,
+                                                  dst_null_map);
         } else if (check_column<ColumnUInt8>(*nested_column)) {
             res = _execute_number<ColumnUInt8>(offsets, *nested_column, 
src_null_map,
                                                *arguments[1].column, 
nested_null_map, dst_null_map);
diff --git a/be/src/vec/functions/array/function_array_index.h 
b/be/src/vec/functions/array/function_array_index.h
index bce8eb2caf..d8d9dbe4b5 100644
--- a/be/src/vec/functions/array/function_array_index.h
+++ b/be/src/vec/functions/array/function_array_index.h
@@ -21,6 +21,7 @@
 
 #include <string_view>
 
+#include "vec/columns/column.h"
 #include "vec/columns/column_array.h"
 #include "vec/columns/column_string.h"
 #include "vec/data_types/data_type_array.h"
@@ -233,6 +234,14 @@ private:
             return _execute_number<NestedColumnType, ColumnDateTime>(
                     offsets, nested_null_map, nested_column, right_column, 
right_nested_null_map,
                     outer_null_map);
+        } else if (check_column<ColumnDateV2>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnDateV2>(
+                    offsets, nested_null_map, nested_column, right_column, 
right_nested_null_map,
+                    outer_null_map);
+        } else if (check_column<ColumnDateTimeV2>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnDateTimeV2>(
+                    offsets, nested_null_map, nested_column, right_column, 
right_nested_null_map,
+                    outer_null_map);
         } else if (check_column<ColumnDecimal128>(right_column)) {
             return _execute_number<NestedColumnType, ColumnDecimal128>(
                     offsets, nested_null_map, nested_column, right_column, 
right_nested_null_map,
@@ -337,6 +346,14 @@ private:
                 return_column = _execute_number_expanded<ColumnDateTime>(
                         offsets, nested_null_map, *nested_column, 
*right_column,
                         right_nested_null_map, array_null_map);
+            } else if (check_column<ColumnDateV2>(*nested_column)) {
+                return_column = _execute_number_expanded<ColumnDateV2>(
+                        offsets, nested_null_map, *nested_column, 
*right_column,
+                        right_nested_null_map, array_null_map);
+            } else if (check_column<ColumnDateTimeV2>(*nested_column)) {
+                return_column = _execute_number_expanded<ColumnDateTimeV2>(
+                        offsets, nested_null_map, *nested_column, 
*right_column,
+                        right_nested_null_map, array_null_map);
             }
         }
 
diff --git a/be/src/vec/functions/array/function_array_join.h 
b/be/src/vec/functions/array/function_array_join.h
index 6524507490..05b69901cc 100644
--- a/be/src/vec/functions/array/function_array_join.h
+++ b/be/src/vec/functions/array/function_array_join.h
@@ -235,6 +235,12 @@ private:
         } else if (which.is_date_time()) {
             res = _execute_number<ColumnDateTime>(src_column, src_offsets, 
src_null_map, sep_str,
                                                   null_replace_str, 
nested_type, dest_column_ptr);
+        } else if (which.is_date_v2()) {
+            res = _execute_number<ColumnDateV2>(src_column, src_offsets, 
src_null_map, sep_str,
+                                                null_replace_str, nested_type, 
dest_column_ptr);
+        } else if (which.is_date_time_v2()) {
+            res = _execute_number<ColumnDateTimeV2>(src_column, src_offsets, 
src_null_map, sep_str,
+                                                    null_replace_str, 
nested_type, dest_column_ptr);
         } else if (which.is_decimal128()) {
             res = _execute_number<ColumnDecimal128>(src_column, src_offsets, 
src_null_map, sep_str,
                                                     null_replace_str, 
nested_type, dest_column_ptr);
diff --git a/be/src/vec/functions/array/function_array_remove.h 
b/be/src/vec/functions/array/function_array_remove.h
index 6565102fb7..cb8ef46a0a 100644
--- a/be/src/vec/functions/array/function_array_remove.h
+++ b/be/src/vec/functions/array/function_array_remove.h
@@ -17,8 +17,10 @@
 
 #pragma once
 
+#include "vec/columns/column.h"
 #include "vec/columns/column_array.h"
 #include "vec/columns/column_const.h"
+#include "vec/data_types/data_type.h"
 #include "vec/data_types/data_type_array.h"
 #include "vec/data_types/data_type_number.h"
 #include "vec/functions/function.h"
@@ -245,6 +247,12 @@ private:
         } else if (right_column.is_datetime_type()) {
             return _execute_number<NestedColumnType, ColumnDateTime>(offsets, 
nested_column,
                                                                      
right_column, nested_null_map);
+        } else if (check_column<ColumnDateV2>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnDateV2>(offsets, 
nested_column,
+                                                                   
right_column, nested_null_map);
+        } else if (check_column<ColumnDateTimeV2>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnDateTimeV2>(
+                    offsets, nested_column, right_column, nested_null_map);
         } else if (check_column<ColumnInt64>(right_column)) {
             return _execute_number<NestedColumnType, ColumnInt64>(offsets, 
nested_column,
                                                                   
right_column, nested_null_map);
@@ -330,8 +338,16 @@ private:
                 res = _execute_number_expanded<ColumnDateTime>(offsets, 
*nested_column,
                                                                *right_column, 
nested_null_map);
             }
+        } else if (is_date_v2_or_datetime_v2(right_type) &&
+                   is_date_v2_or_datetime_v2(left_element_type)) {
+            if (check_column<ColumnDateV2>(*nested_column)) {
+                res = _execute_number_expanded<ColumnDateV2>(offsets, 
*nested_column, *right_column,
+                                                             nested_null_map);
+            } else if (check_column<ColumnDateTimeV2>(*nested_column)) {
+                res = _execute_number_expanded<ColumnDateTimeV2>(offsets, 
*nested_column,
+                                                                 
*right_column, nested_null_map);
+            }
         }
-
         return res;
     }
 };
diff --git a/be/src/vec/functions/array/function_array_set.h 
b/be/src/vec/functions/array/function_array_set.h
index df311131df..aeb895e07d 100644
--- a/be/src/vec/functions/array/function_array_set.h
+++ b/be/src/vec/functions/array/function_array_set.h
@@ -161,6 +161,8 @@ public:
         if (_execute_internal<ColumnString>(dst, left_data, right_data) ||
             _execute_internal<ColumnDate>(dst, left_data, right_data) ||
             _execute_internal<ColumnDateTime>(dst, left_data, right_data) ||
+            _execute_internal<ColumnDateV2>(dst, left_data, right_data) ||
+            _execute_internal<ColumnDateTimeV2>(dst, left_data, right_data) ||
             _execute_internal<ColumnUInt8>(dst, left_data, right_data) ||
             _execute_internal<ColumnInt8>(dst, left_data, right_data) ||
             _execute_internal<ColumnInt16>(dst, left_data, right_data) ||
diff --git a/be/src/vec/functions/array/function_array_sort.h 
b/be/src/vec/functions/array/function_array_sort.h
index 2637e31429..5b1b78fed0 100644
--- a/be/src/vec/functions/array/function_array_sort.h
+++ b/be/src/vec/functions/array/function_array_sort.h
@@ -270,6 +270,12 @@ private:
         } else if (which.is_date_time()) {
             res = _execute_number<ColumnDateTime>(src_column, src_offsets, 
dest_column,
                                                   dest_offsets, src_null_map, 
dest_null_map);
+        } else if (which.is_date_v2()) {
+            res = _execute_number<ColumnDateV2>(src_column, src_offsets, 
dest_column, dest_offsets,
+                                                src_null_map, dest_null_map);
+        } else if (which.is_date_time_v2()) {
+            res = _execute_number<ColumnDateTimeV2>(src_column, src_offsets, 
dest_column,
+                                                    dest_offsets, 
src_null_map, dest_null_map);
         } else if (which.is_decimal128()) {
             res = _execute_number<ColumnDecimal128>(src_column, src_offsets, 
dest_column,
                                                     dest_offsets, 
src_null_map, dest_null_map);
diff --git a/be/src/vec/functions/array/function_arrays_overlap.h 
b/be/src/vec/functions/array/function_arrays_overlap.h
index 72a33e4240..21eb10e24e 100644
--- a/be/src/vec/functions/array/function_arrays_overlap.h
+++ b/be/src/vec/functions/array/function_arrays_overlap.h
@@ -140,6 +140,14 @@ public:
             ret = _execute_internal<ColumnDateTime>(left_exec_data, 
right_exec_data,
                                                     dst_null_map_data,
                                                     
dst_nested_col->get_data().data());
+        } else if (check_column<ColumnDateV2>(left_exec_data.nested_col)) {
+            ret = _execute_internal<ColumnDateV2>(left_exec_data, 
right_exec_data,
+                                                  dst_null_map_data,
+                                                  
dst_nested_col->get_data().data());
+        } else if (check_column<ColumnDateTimeV2>(left_exec_data.nested_col)) {
+            ret = _execute_internal<ColumnDateTimeV2>(left_exec_data, 
right_exec_data,
+                                                      dst_null_map_data,
+                                                      
dst_nested_col->get_data().data());
         } else if (left_exec_data.nested_col->is_numeric()) {
             if (check_column<ColumnUInt8>(*left_exec_data.nested_col)) {
                 ret = _execute_internal<ColumnUInt8>(left_exec_data, 
right_exec_data,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 3632c3577a..f4d6ea358c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -120,6 +120,19 @@ public class FunctionCallExpr extends Expr {
                 return returnType;
             }
         };
+        java.util.function.BiFunction<ArrayList<Expr>, Type, Type> 
arrayDateTimeV2OrDecimalV3Rule
+                = (children, returnType) -> {
+                    Preconditions.checkArgument(children != null && 
children.size() > 0);
+                    if (children.get(0).getType().isArrayType() && (
+                            ((ArrayType) 
children.get(0).getType()).getItemType().isDecimalV3()
+                                    || ((ArrayType) children.get(0)
+                                    .getType()).getItemType().isDecimalV2() || 
((ArrayType) children.get(0)
+                                    .getType()).getItemType().isDatetimeV2())) 
{
+                        return ((ArrayType) 
children.get(0).getType()).getItemType();
+                    } else {
+                        return returnType;
+                    }
+                };
         PRECISION_INFER_RULE = new HashMap<>();
         PRECISION_INFER_RULE.put("sum", sumRule);
         PRECISION_INFER_RULE.put("multi_distinct_sum", sumRule);
@@ -150,29 +163,10 @@ public class FunctionCallExpr extends Expr {
             }
         });
 
-        PRECISION_INFER_RULE.put("array_min", (children, returnType) -> {
-            Preconditions.checkArgument(children != null && children.size() > 
0);
-            if (children.get(0).getType().isArrayType() && (
-                    ((ArrayType) 
children.get(0).getType()).getItemType().isDecimalV3() || ((ArrayType) 
children.get(0)
-                            .getType()).getItemType().isDecimalV2() || 
((ArrayType) children.get(0)
-                            .getType()).getItemType().isDatetimeV2())) {
-                return ((ArrayType) children.get(0).getType()).getItemType();
-            } else {
-                return returnType;
-            }
-        });
-
-        PRECISION_INFER_RULE.put("array_max", (children, returnType) -> {
-            Preconditions.checkArgument(children != null && children.size() > 
0);
-            if (children.get(0).getType().isArrayType() && (
-                    ((ArrayType) 
children.get(0).getType()).getItemType().isDecimalV3() || ((ArrayType) 
children.get(0)
-                            .getType()).getItemType().isDecimalV2() || 
((ArrayType) children.get(0)
-                            .getType()).getItemType().isDatetimeV2())) {
-                return ((ArrayType) children.get(0).getType()).getItemType();
-            } else {
-                return returnType;
-            }
-        });
+        PRECISION_INFER_RULE.put("array_min", arrayDateTimeV2OrDecimalV3Rule);
+        PRECISION_INFER_RULE.put("array_max", arrayDateTimeV2OrDecimalV3Rule);
+        PRECISION_INFER_RULE.put("element_at", arrayDateTimeV2OrDecimalV3Rule);
+        PRECISION_INFER_RULE.put("%element_extract%", 
arrayDateTimeV2OrDecimalV3Rule);
 
         PRECISION_INFER_RULE.put("round", roundRule);
         PRECISION_INFER_RULE.put("round_bankers", roundRule);
@@ -1372,7 +1366,7 @@ public class FunctionCallExpr extends Expr {
                             || children.get(0).getType().isDatetimeV2() && 
args[ix].isDatetimeV2())) {
                         continue;
                     } else if 
((fnName.getFunction().equalsIgnoreCase("array_min") || fnName.getFunction()
-                            .equalsIgnoreCase("array_max"))
+                            .equalsIgnoreCase("array_max") || 
fnName.getFunction().equalsIgnoreCase("element_at"))
                             && ((
                             children.get(0).getType().isDecimalV3() && 
((ArrayType) args[ix]).getItemType()
                                     .isDecimalV3())
@@ -1460,6 +1454,28 @@ public class FunctionCallExpr extends Expr {
             if (children.size() > 0) {
                 this.type = new ArrayType(children.get(0).getType());
             }
+        } else if (fnName.getFunction().equalsIgnoreCase("if")) {
+            if (children.get(1).getType().isArrayType() && (
+                    ((ArrayType) 
children.get(1).getType()).getItemType().isDecimalV3()
+                            || ((ArrayType) children.get(1)
+                            .getType()).getItemType().isDecimalV2() || 
((ArrayType) children.get(1)
+                            .getType()).getItemType().isDatetimeV2())) {
+                this.type = children.get(1).getType();
+            }
+        } else if (fnName.getFunction().equalsIgnoreCase("array_distinct") || 
fnName.getFunction()
+                .equalsIgnoreCase("array_remove") || 
fnName.getFunction().equalsIgnoreCase("array_sort")
+                || fnName.getFunction().equalsIgnoreCase("array_overlap")
+                || fnName.getFunction().equalsIgnoreCase("array_union")
+                || fnName.getFunction().equalsIgnoreCase("array_intersect")
+                || fnName.getFunction().equalsIgnoreCase("array_compact")
+                || fnName.getFunction().equalsIgnoreCase("array_slice")
+                || fnName.getFunction().equalsIgnoreCase("array_popback")
+                || fnName.getFunction().equalsIgnoreCase("reverse")
+                || fnName.getFunction().equalsIgnoreCase("%element_slice%")
+                || fnName.getFunction().equalsIgnoreCase("array_except")) {
+            if (children.size() > 0) {
+                this.type = children.get(0).getType();
+            }
         }
 
         if (this.type instanceof ArrayType) {
diff --git a/gensrc/script/doris_builtins_functions.py 
b/gensrc/script/doris_builtins_functions.py
index 5222b6ce8d..fd6a47529e 100644
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -456,6 +456,8 @@ visible_functions = [
     [['array_slice', '%element_slice%'], 'ARRAY_LARGEINT', ['ARRAY_LARGEINT', 
'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DATETIME', ['ARRAY_DATETIME', 
'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DATE', ['ARRAY_DATE', 
'BIGINT'], ''],
+    [['array_slice', '%element_slice%'], 'ARRAY_DATETIMEV2', 
['ARRAY_DATETIMEV2', 'BIGINT'], ''],
+    [['array_slice', '%element_slice%'], 'ARRAY_DATEV2', ['ARRAY_DATEV2', 
'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_FLOAT', ['ARRAY_FLOAT', 
'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DOUBLE', ['ARRAY_DOUBLE', 
'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DECIMALV2', 
['ARRAY_DECIMALV2', 'BIGINT'], ''],
@@ -473,6 +475,8 @@ visible_functions = [
     [['array_slice', '%element_slice%'], 'ARRAY_LARGEINT', ['ARRAY_LARGEINT', 
'BIGINT', 'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DATETIME', ['ARRAY_DATETIME', 
'BIGINT', 'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DATE', ['ARRAY_DATE', 
'BIGINT', 'BIGINT'], ''],
+    [['array_slice', '%element_slice%'], 'ARRAY_DATETIMEV2', 
['ARRAY_DATETIMEV2', 'BIGINT', 'BIGINT'], ''],
+    [['array_slice', '%element_slice%'], 'ARRAY_DATEV2', ['ARRAY_DATEV2', 
'BIGINT', 'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_FLOAT', ['ARRAY_FLOAT', 
'BIGINT', 'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DOUBLE', ['ARRAY_DOUBLE', 
'BIGINT', 'BIGINT'], ''],
     [['array_slice', '%element_slice%'], 'ARRAY_DECIMALV2', 
['ARRAY_DECIMALV2', 'BIGINT', 'BIGINT'], ''],
@@ -490,6 +494,8 @@ visible_functions = [
     [['array_popback'], 'ARRAY_LARGEINT', ['ARRAY_LARGEINT'], ''],
     [['array_popback'], 'ARRAY_DATETIME', ['ARRAY_DATETIME'], ''],
     [['array_popback'], 'ARRAY_DATE', ['ARRAY_DATE'], ''],
+    [['array_popback'], 'ARRAY_DATETIMEV2', ['ARRAY_DATETIMEV2'], ''],
+    [['array_popback'], 'ARRAY_DATEV2', ['ARRAY_DATEV2'], ''],
     [['array_popback'], 'ARRAY_FLOAT', ['ARRAY_FLOAT'], ''],
     [['array_popback'], 'ARRAY_DOUBLE', ['ARRAY_DOUBLE'], ''],
     [['array_popback'], 'ARRAY_DECIMALV2', ['ARRAY_DECIMALV2'], ''],
@@ -507,6 +513,8 @@ visible_functions = [
     [['array_with_constant'], 'ARRAY_LARGEINT', ['BIGINT', 'LARGEINT'], 
'ALWAYS_NOT_NULLABLE'],
     [['array_with_constant'], 'ARRAY_DATETIME', ['BIGINT', 'DATETIME'], 
'ALWAYS_NOT_NULLABLE'],
     [['array_with_constant'], 'ARRAY_DATE', ['BIGINT', 'DATE'], 
'ALWAYS_NOT_NULLABLE'],
+    [['array_with_constant'], 'ARRAY_DATETIMEV2', ['BIGINT', 'DATETIMEV2'], 
'ALWAYS_NOT_NULLABLE'],
+    [['array_with_constant'], 'ARRAY_DATEV2', ['BIGINT', 'DATEV2'], 
'ALWAYS_NOT_NULLABLE'],
     [['array_with_constant'], 'ARRAY_FLOAT', ['BIGINT', 'FLOAT'], 
'ALWAYS_NOT_NULLABLE'],
     [['array_with_constant'], 'ARRAY_DOUBLE', ['BIGINT', 'DOUBLE'], 
'ALWAYS_NOT_NULLABLE'],
     [['array_with_constant'], 'ARRAY_DECIMALV2', ['BIGINT', 'DECIMALV2'], 
'ALWAYS_NOT_NULLABLE'],
@@ -531,6 +539,8 @@ visible_functions = [
     [['reverse'], 'ARRAY_LARGEINT',  ['ARRAY_LARGEINT'], ''],
     [['reverse'], 'ARRAY_DATETIME',  ['ARRAY_DATETIME'], ''],
     [['reverse'], 'ARRAY_DATE',      ['ARRAY_DATE'], ''],
+    [['reverse'], 'ARRAY_DATETIMEV2',  ['ARRAY_DATETIMEV2'], ''],
+    [['reverse'], 'ARRAY_DATEV2',      ['ARRAY_DATEV2'], ''],
     [['reverse'], 'ARRAY_FLOAT',     ['ARRAY_FLOAT'], ''],
     [['reverse'], 'ARRAY_DOUBLE',    ['ARRAY_DOUBLE'], ''],
     [['reverse'], 'ARRAY_DECIMALV2', ['ARRAY_DECIMALV2'], ''],
diff --git 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
index 6424664700..c0a773048f 100644
--- 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
+++ 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
@@ -1,31 +1,31 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
-1      1       100     1000    2147483648      9223372036854775808     0       
1.0     100.0001        2022-08-31      2022-08-31T12:00
-2      1       \N      \N      \N      \N      \N      127.0   4.023   \N      
\N
-3      -1      -32768  -2147483647     -9223372036854775808    
-117341182548128045443221445    -9.999999       -1.0    -128.0001       \N      
\N
-4      \N      \N      \N      \N      \N      \N      \N      \N      \N      
\N
+1      1       100     1000    2147483648      9223372036854775808     0E-9    
1.0     100.0001        2022-08-31      2022-08-31T12:00        2022-08-31      
2022-08-31T12:00:00.999
+2      1       \N      \N      \N      \N      \N      127.0   4.023   \N      
\N      \N      \N
+3      -1      -32768  -2147483647     -9223372036854775808    
-117341182548128045443221445    -9.999999000    -1.0    -128.0001       \N      
\N      \N      \N
+4      \N      \N      \N      \N      \N      \N      \N      \N      \N      
\N      \N      \N
 
 -- !select --
-1      3       101     1001    2147483649      9223372036854775808     
9.999999        1.5     100.0005        2022-10-15      2022-10-15T10:30
-2      3       \N      \N      \N      \N      \N      128.1   4.023   \N      
\N
-3      1       -32767  -50000  0       170141183460469231731687303715884105727 
9.999999        1.0     127.0001        \N      \N
-4      \N      \N      \N      \N      \N      \N      \N      \N      \N      
\N
+1      3       101     1001    2147483649      9223372036854775808     
9.999999000     1.5     100.0005        2022-10-15      2022-10-15T10:30        
2022-10-15      2022-10-15T10:30:00.999
+2      3       \N      \N      \N      \N      \N      128.1   4.023   \N      
\N      \N      \N
+3      1       -32767  -50000  0       170141183460469231731687303715884105727 
9.999999000     1.0     127.0001        \N      \N      \N      \N
+4      \N      \N      \N      \N      \N      \N      \N      \N      \N      
\N      \N      \N
 
 -- !select --
-1      2.0     100.5   1000.5  2.1474836485E9  9.223372036854776E18    
4.9999995       1.25    100.00030000000001
+1      2.0     100.5   1000.5  2.1474836485E9  9.223372036854776E18    
4.999999500     1.25    100.00030000000001
 2      2.0     \N      \N      \N      \N      \N      127.55000305175781      
4.023
-3      0.0     -32767.5        -1.0737668235E9 -4.6116860184273879E18  
8.5070591730175945E37   0       0.0     -0.5
+3      0.0     -32767.5        -1.0737668235E9 -4.6116860184273879E18  
8.5070591730175945E37   0E-9    0.0     -0.5
 4      \N      \N      \N      \N      \N      \N      \N      \N
 
 -- !select --
-1      6       201     2001    4294967297      9223372036854775808     
9.999999        2.5     200.00060000000002
+1      6       201     2001    4294967297      9223372036854775808     
9.999999000     2.5     200.00060000000002
 2      12      \N      \N      \N      \N      \N      255.10000610351562      
4.023
-3      0       -65535  -2147533647     -9223372036854775808    
170141183460351890549139175670440884282 0       0.0     -1.0
+3      0       -65535  -2147533647     -9223372036854775808    
170141183460351890549139175670440884282 0E-9    0.0     -1.0
 4      \N      \N      \N      \N      \N      \N      \N      \N
 
 -- !select --
-1      6.0     10100.0 1001000.0       4.6116860205748716E18   
9.223372036854776E18    0       1.5     10000.06000005
+1      6.0     10100.0 1001000.0       4.6116860205748716E18   
9.223372036854776E18    0E-9    1.5     10000.06000005
 2      36.0    \N      \N      \N      \N      \N      16268.700775146484      
4.023
-3      -0.0    1.073709056E9   1.0737418235E14 -0.0    -1.9964567667389465E64  
-7766259631453241920    -0.0    -16256.02550001
+3      -0.0    1.073709056E9   1.0737418235E14 -0.0    -1.9964567667389465E64  
-99.999980000   -0.0    -16256.02550001
 4      \N      \N      \N      \N      \N      \N      \N      \N
 
diff --git 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
index 22a42eb4cf..0aa8122714 100644
--- 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
+++ 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
@@ -32,6 +32,28 @@
 8      \N
 9      true
 
+-- !select --
+1      true
+2      true
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      true
+2      true
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [1, 2, 3]       ['a', 'b', '']
 2      [4]     \N
@@ -43,6 +65,17 @@
 8      [1, 2, 3, 4, NULL]      ['a', 'b']
 9      [1, 2, 3]       ['a', 'b', '']
 
+-- !select --
+1      [2023-02-05, 2023-02-06]        [2022-10-15 10:30:00.999, 2022-08-31 
12:00:00.999]
+2      [2023-01-05, 2023-01-06]        [2022-11-15 10:30:00.999, 2022-01-31 
12:00:00.999]
+3      \N      \N
+4      \N      \N
+5      \N      \N
+6      \N      \N
+7      \N      \N
+8      \N      \N
+9      \N      \N
+
 -- !select --
 [2, 3] 1
 [4]    2
@@ -54,6 +87,28 @@
 [1, 2, 3, 3, 4, 4, NULL]       8
 [1, 2, 3]      9
 
+-- !select --
+[2023-02-06]
+[2023-01-05, 2023-01-06]
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !select --
+[2022-08-31 12:00:00.999]
+[2022-11-15 10:30:00.999, 2022-01-31 12:00:00.999]
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
 -- !select --
 1      [1, 2, 3]       ['', 'a', 'b']  [1, 2]
 2      [4]     \N      [5]
@@ -65,6 +120,17 @@
 8      [NULL, 1, 2, 3, 3, 4, 4]        ['a', 'b', 'b', 'b']    [1, 2, 2, 3]
 9      [1, 2, 3]       ['', 'a', 'b']  [1, 2]
 
+-- !select --
+1      [2023-02-05, 2023-02-06]        [2022-08-31 12:00:00.999, 2022-10-15 
10:30:00.999]
+2      [2023-01-05, 2023-01-06]        [2022-01-31 12:00:00.999, 2022-11-15 
10:30:00.999]
+3      \N      \N
+4      \N      \N
+5      \N      \N
+6      \N      \N
+7      \N      \N
+8      \N      \N
+9      \N      \N
+
 -- !select --
 1      [1, 2, 3]
 2      [4, 5]
@@ -76,6 +142,28 @@
 8      [1, 2, 3, 4, NULL]
 9      [1, 2, 3]
 
+-- !select --
+1      [2023-02-05, 2023-02-06, 2023-02-07]
+2      [2023-01-05, 2023-01-06, 2023-01-07]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [2022-10-15 10:30:00.999, 2022-08-31 12:00:00.999, 2022-10-16 
10:30:00.999]
+2      [2022-11-15 10:30:00.999, 2022-01-31 12:00:00.999, 2022-11-16 
10:30:00.999]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [3]
 2      [4]
@@ -87,6 +175,28 @@
 8      [4, NULL]
 9      [3]
 
+-- !select --
+1      [2023-02-05]
+2      [2023-01-05]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [2022-10-15 10:30:00.999]
+2      [2022-11-15 10:30:00.999]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [1, 2]
 2      []
@@ -98,6 +208,28 @@
 8      [1, 2, 3]
 9      [1, 2]
 
+-- !select --
+1      [2023-02-06]
+2      [2023-01-06]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [2022-08-31 12:00:00.999]
+2      [2022-01-31 12:00:00.999]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [2, 3]
 2      []
@@ -120,6 +252,28 @@
 8      [1, 2]
 9      [1, 2]
 
+-- !select --
+1      [2023-02-05, 2023-02-06]
+2      [2023-01-05, 2023-01-06]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [2022-10-15 10:30:00.999, 2022-08-31 12:00:00.999]
+2      [2022-11-15 10:30:00.999, 2022-01-31 12:00:00.999]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [3, 2, 1]       ['', 'b', 'a']  [2, 1]
 2      [4]     \N      [5]
@@ -131,6 +285,17 @@
 8      [NULL, 4, 4, 3, 3, 2, 1]        ['b', 'b', 'b', 'a']    [3, 2, 2, 1]
 9      [3, 2, 1]       ['', 'b', 'a']  [2, 1]
 
+-- !select --
+1      [2023-02-06, 2023-02-05]        [2022-08-31 12:00:00.999, 2022-10-15 
10:30:00.999]
+2      [2023-01-06, 2023-01-05]        [2022-01-31 12:00:00.999, 2022-11-15 
10:30:00.999]
+3      \N      \N
+4      \N      \N
+5      \N      \N
+6      \N      \N
+7      \N      \N
+8      \N      \N
+9      \N      \N
+
 -- !select --
 1      1_2_3   a-b-
 2      4       \N
@@ -219,6 +384,28 @@
 8      false
 9      false
 
+-- !select --
+1      true
+2      false
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      true
+2      false
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [1, 2, 3]
 2      [1]
@@ -263,6 +450,28 @@
 8      [1]
 9      [1, 2]
 
+-- !select --
+1      [1, 2]
+2      [1, 2]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [1, 2]
+2      [1, 2]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [1, 2]
 2      []
@@ -307,6 +516,28 @@
 8      []
 9      [2015-03-13 12:36:38]
 
+-- !select --
+1      [2023-02-05]
+2      [2023-01-05]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      [2022-10-15 10:30:00.999]
+2      [2022-11-15 10:30:00.999]
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 1      [1, 1, 1]
 2      [2, 2, 2]
@@ -461,6 +692,28 @@
 8      0
 9      0
 
+-- !select --
+1      1
+2      0
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !select --
+1      1
+2      0
+3      \N
+4      \N
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
 -- !select --
 \N     \N
 -1     \N
@@ -593,11 +846,11 @@
 1      [2023-01-19 18:11:11.111, 2023-01-19 18:22:22.222, 2023-01-19 
18:33:33.333]     [2023-01-19 18:22:22.222, 2023-01-19 18:33:33.333, 2023-01-19 
18:44:44.444]     [2023-01-19 18:11:11.111111, 2023-01-19 18:22:22.222222, 
2023-01-19 18:33:33.333333]
 
 -- !select_array_datetimev2_2 --
-[2023-01-19 18:11:11, 2023-01-19 18:22:22, 2023-01-19 18:33:33]
+[2023-01-19 18:11:11.111, 2023-01-19 18:22:22.222, 2023-01-19 18:33:33.333]
 
 -- !select_array_datetimev2_3 --
-[2023-01-19 18:22:22, 2023-01-19 18:33:33, 2023-01-19 18:44:44]
+[2023-01-19 18:22:22.222, 2023-01-19 18:33:33.333, 2023-01-19 18:44:44.444]
 
 -- !select_array_datetimev2_4 --
-[2023-01-19 18:11:11, 2023-01-19 18:22:22, 2023-01-19 18:33:33]
+[2023-01-19 18:11:11.111, 2023-01-19 18:22:22.222, 2023-01-19 18:33:33.333]
 
diff --git 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
index 01ec14bfdf..2384f7bec7 100644
--- 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
+++ 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
@@ -26,6 +26,12 @@ false
 -- !sql --
 false
 
+-- !sql --
+true
+
+-- !sql --
+true
+
 -- !sql --
 1
 
@@ -71,6 +77,12 @@ false
 -- !sql --
 1
 
+-- !sql --
+2
+
+-- !sql --
+1
+
 -- !sql --
 3
 
@@ -95,6 +107,12 @@ false
 -- !sql --
 \N
 
+-- !sql --
+2023-02-04T22:07:34.999
+
+-- !sql --
+2023-02-05
+
 -- !sql --
 1
 
@@ -122,6 +140,12 @@ false
 -- !sql --
 [1, 0]
 
+-- !sql --
+2023-02-04T23:07:34.999
+
+-- !sql --
+2023-02-05
+
 -- !sql --
 2.0
 
@@ -188,6 +212,18 @@ false
 -- !sql --
 -16.344720000
 
+-- !sql --
+2023-02-04T22:07:34.999
+
+-- !sql --
+2023-02-04T23:07:34.999
+
+-- !sql --
+2023-02-04
+
+-- !sql --
+2023-02-05
+
 -- !sql --
 [1, 2, 3]
 
@@ -215,6 +251,12 @@ false
 -- !sql --
 [1, 0, NULL]
 
+-- !sql --
+[2023-02-04 22:07:34.999, 2023-02-04 23:07:34.999]
+
+-- !sql --
+[2023-02-04, 2023-02-05]
+
 -- !sql --
 [2, 3]
 
@@ -230,6 +272,12 @@ false
 -- !sql --
 [1]
 
+-- !sql --
+[2023-02-04 23:07:34.999]
+
+-- !sql --
+[2023-02-04]
+
 -- !sql --
 [1, 2, 3]
 
@@ -254,6 +302,12 @@ false
 -- !sql --
 []
 
+-- !sql --
+[2023-02-04 23:07:34.999, 2023-02-06 22:07:34.999]
+
+-- !sql --
+[2023-02-05, 2023-02-06]
+
 -- !sql --
 false
 
@@ -269,6 +323,18 @@ false
 -- !sql --
 false
 
+-- !sql --
+true
+
+-- !sql --
+false
+
+-- !sql --
+true
+
+-- !sql --
+false
+
 -- !sql --
 [1, 2, 3, 4]
 
@@ -332,6 +398,24 @@ false
 -- !sql --
 []
 
+-- !sql --
+[2023-02-06 22:07:34.999, 2023-02-04 23:07:34.999, 2023-02-07 22:07:34.999]
+
+-- !sql --
+[2023-02-06 22:07:34.999]
+
+-- !sql --
+[2023-02-04 23:07:34.999]
+
+-- !sql --
+[2023-02-06, 2023-02-05, 2023-02-07]
+
+-- !sql --
+[2023-02-06]
+
+-- !sql --
+[2023-02-05]
+
 -- !sql --
 [1]
 
@@ -359,6 +443,12 @@ false
 -- !sql --
 [0, 0]
 
+-- !sql --
+[2023-02-06 22:07:34.999, 2023-02-04 23:07:34.999]
+
+-- !sql --
+[2023-02-06, 2023-02-05]
+
 -- !sql --
 1_2_3
 
@@ -425,6 +515,12 @@ _
 -- !sql --
 ['2015-03-13']
 
+-- !sql --
+[2023-02-06 22:07:34.999, 2023-02-04 23:07:34.999, 2023-02-07 22:07:34.999, 
2023-02-04 23:07:34.999]
+
+-- !sql --
+[2023-02-06, 2023-02-05, 2023-02-07, 2023-02-05]
+
 -- !sql --
 [8, NULL]
 
diff --git 
a/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
 
b/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
index 90d372c356..60eb0f837f 100644
--- 
a/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
+++ 
b/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
@@ -14,6 +14,12 @@
 -- !sql --
 [2022-09-01]
 
+-- !sql --
+[2022-09-01]
+
+-- !sql --
+[2022-09-01 00:00:00]
+
 -- !sql --
 [1, 2, 3, 0, 0, 0]
 
diff --git 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
index b48772a07c..fb7839c110 100644
--- 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
@@ -31,7 +31,9 @@ suite("test_array_aggregation_functions") {
               `a7` array<float> NULL COMMENT "",
               `a8` array<double> NULL COMMENT "",
               `a9` array<date> NULL COMMENT "",
-              `a10` array<datetime> NULL COMMENT ""
+              `a10` array<datetime> NULL COMMENT "",
+              `a11` array<datev2> NULL COMMENT "",
+              `a12` array<datetimev2(3)> NULL COMMENT ""
             ) ENGINE=OLAP
             DUPLICATE KEY(`k1`)
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
@@ -40,13 +42,13 @@ suite("test_array_aggregation_functions") {
             "storage_format" = "V2"
             )
         """
-    sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000, 
1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0, 
1.5], [100.0001, 100.0005], ['2022-10-15', '2022-08-31', '2022-09-01'], 
['2022-10-15 10:30:00', '2022-08-31 12:00:00', '2022-09-01 09:00:00']) """
-    sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL, 
NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL) """
-    sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768], 
[-50000, -2147483647], [-9223372036854775808, 0], 
[-117341182548128045443221445, 170141183460469231731687303715884105727], 
[-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL) """
-    sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [], 
[], NULL) """
+    sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000, 
1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0, 
1.5], [100.0001, 100.0005], ['2022-10-15', '2022-08-31', '2022-09-01'], 
['2022-10-15 10:30:00', '2022-08-31 12:00:00', '2022-09-01 09:00:00'], 
['2022-10-15', '2022-08-31', '2022-09-01'], ['2022-10-15 10:30:00.999', 
'2022-08-31 12:00:00.999', '2022-09-01 09:00:00.999']) """
+    sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL, 
NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL, NULL, NULL) """
+    sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768], 
[-50000, -2147483647], [-9223372036854775808, 0], 
[-117341182548128045443221445, 170141183460469231731687303715884105727], 
[-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL, 
NULL, NULL) """
+    sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [], 
[], NULL, NULL, NULL) """
 
-    qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3), 
array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8), 
array_min(a9), array_min(a10) from ${tableName} order by k1"
-    qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3), 
array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8), 
array_max(a9), array_max(a10) from ${tableName} order by k1"
+    qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3), 
array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8), 
array_min(a9), array_min(a10), array_min(a11), array_min(a12) from ${tableName} 
order by k1"
+    qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3), 
array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8), 
array_max(a9), array_max(a10), array_max(a11), array_max(a12) from ${tableName} 
order by k1"
     qt_select "SELECT k1, array_avg(a1), array_avg(a2), array_avg(a3), 
array_avg(a4), array_avg(a5), array_avg(a6), array_avg(a7), array_avg(a8) from 
${tableName} order by k1"
     qt_select "SELECT k1, array_sum(a1), array_sum(a2), array_sum(a3), 
array_sum(a4), array_sum(a5), array_sum(a6), array_sum(a7), array_sum(a8) from 
${tableName} order by k1"
     qt_select "SELECT k1, array_product(a1), array_product(a2), 
array_product(a3), array_product(a4), array_product(a5), array_product(a6), 
array_product(a7), array_product(a8) from ${tableName} order by k1"
diff --git 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
index 096d3245fc..f4edcba8ea 100644
--- 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
@@ -27,7 +27,11 @@ suite("test_array_functions") {
               `k4` ARRAY<int(11)> NULL COMMENT "",
               `k5` ARRAY<CHAR(5)> NULL COMMENT "",
               `k6` ARRAY<date> NULL COMMENT "",
-              `k7` ARRAY<datetime> NULL COMMENT ""
+              `k7` ARRAY<datetime> NULL COMMENT "",
+              `k8` ARRAY<datev2> NULL COMMENT "",
+              `k9` ARRAY<datev2> NULL COMMENT "",
+              `k10` ARRAY<datetimev2(3)> NULL COMMENT "",
+              `k11` ARRAY<datetimev2(3)> NULL COMMENT ""
             ) ENGINE=OLAP
             DUPLICATE KEY(`k1`)
             DISTRIBUTED BY HASH(`k1`) BUCKETS 1
@@ -36,28 +40,43 @@ suite("test_array_functions") {
             "storage_format" = "V2"
             )
         """
-    sql """ INSERT INTO ${tableName} 
VALUES(1,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13"],["2015-03-13 
12:36:38"]) """
-    sql """ INSERT INTO ${tableName} VALUES(2,[4],NULL,[5],["hi2"],NULL,NULL) 
"""
-    sql """ INSERT INTO ${tableName} VALUES(3,[],[],NULL,["hi3"],NULL,NULL) """
-    sql """ INSERT INTO ${tableName} 
VALUES(4,[1,2,3,4,5,4,3,2,1],[],[],NULL,NULL,NULL) """
-    sql """ INSERT INTO ${tableName} 
VALUES(5,[],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL) """
-    sql """ INSERT INTO ${tableName} 
VALUES(6,[1,2,3,4,5,4,3,2,1],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL) 
"""
-    sql """ INSERT INTO ${tableName} 
VALUES(7,[8,9,NULL,10,NULL],["f",NULL,"g",NULL,"h"],NULL,NULL,NULL,NULL) """
-    sql """ INSERT INTO ${tableName} 
VALUES(8,[1,2,3,3,4,4,NULL],["a","b","b","b"],[1,2,2,3],["hi","hi","hello"],["2015-03-13"],["2015-03-13
 12:36:38"]) """
-    sql """ INSERT INTO ${tableName} 
VALUES(9,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13","2015-03-13","2015-03-14"],["2015-03-13
 12:36:38","2015-03-13 12:36:38"]) """
+    sql """ INSERT INTO ${tableName} 
VALUES(1,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13"],["2015-03-13 
12:36:38"],["2023-02-05","2023-02-06"],["2023-02-07","2023-02-06"],['2022-10-15 
10:30:00.999', '2022-08-31 12:00:00.999'],['2022-10-16 10:30:00.999', 
'2022-08-31 12:00:00.999']) """
+    sql """ INSERT INTO ${tableName} 
VALUES(2,[4],NULL,[5],["hi2"],NULL,NULL,["2023-01-05","2023-01-06"],["2023-01-07","2023-01-06"],['2022-11-15
 10:30:00.999', '2022-01-31 12:00:00.999'],['2022-11-16 10:30:00.999', 
'2022-01-31 12:00:00.999']) """
+    sql """ INSERT INTO ${tableName} 
VALUES(3,[],[],NULL,["hi3"],NULL,NULL,NULL,NULL,NULL,NULL) """
+    sql """ INSERT INTO ${tableName} 
VALUES(4,[1,2,3,4,5,4,3,2,1],[],[],NULL,NULL,NULL,NULL,NULL,NULL,NULL) """
+    sql """ INSERT INTO ${tableName} 
VALUES(5,[],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)
 """
+    sql """ INSERT INTO ${tableName} 
VALUES(6,[1,2,3,4,5,4,3,2,1],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)
 """
+    sql """ INSERT INTO ${tableName} 
VALUES(7,[8,9,NULL,10,NULL],["f",NULL,"g",NULL,"h"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)
 """
+    sql """ INSERT INTO ${tableName} 
VALUES(8,[1,2,3,3,4,4,NULL],["a","b","b","b"],[1,2,2,3],["hi","hi","hello"],["2015-03-13"],["2015-03-13
 12:36:38"],NULL,NULL,NULL,NULL) """
+    sql """ INSERT INTO ${tableName} 
VALUES(9,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13","2015-03-13","2015-03-14"],["2015-03-13
 12:36:38","2015-03-13 12:36:38"],NULL,NULL,NULL,NULL) """
 
     qt_select "SELECT k1, size(k2), size(k3) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, cardinality(k2), cardinality(k3) FROM ${tableName} 
ORDER BY k1"
     qt_select "SELECT k1, arrays_overlap(k2, k4) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, arrays_overlap(k8, k9) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, arrays_overlap(k10, k11) FROM ${tableName} ORDER BY 
k1"
     qt_select "SELECT k1, array_distinct(k2), array_distinct(k3) FROM 
${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_distinct(k8), array_distinct(k10) FROM 
${tableName} ORDER BY k1"
     qt_select "SELECT array_remove(k2, k1), k1 FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT array_remove(k8, cast('2023-02-05' as datev2)) FROM 
${tableName} ORDER BY k1"
+    qt_select "SELECT array_remove(k10, cast('2022-10-15 10:30:00.999' as 
datetimev2(3))) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_sort(k2), array_sort(k3), array_sort(k4) FROM 
${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_sort(k8), array_sort(k10) FROM ${tableName} 
ORDER BY k1"
     qt_select "SELECT k1, array_union(k2, k4) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_union(k8, k9) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_union(k10, k11) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_except(k2, k4) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_except(k8, k9) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_except(k10, k11) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_intersect(k2, k4) FROM ${tableName} ORDER BY 
k1"
+    qt_select "SELECT k1, array_intersect(k8, k9) FROM ${tableName} ORDER BY 
k1"
+    qt_select "SELECT k1, array_intersect(k10, k11) FROM ${tableName} ORDER BY 
k1"
     qt_select "SELECT k1, array_slice(k2, 2) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_slice(k2, 1, 2) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_slice(k8, 1, 2) FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_slice(k10, 1, 2) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, reverse(k2), reverse(k3), reverse(k4) FROM 
${tableName} ORDER BY k1"
+    qt_select "SELECT k1, reverse(k8), reverse(k10) FROM ${tableName} ORDER BY 
k1"
     qt_select "SELECT k1, array_join(k2, '_', 'null'), array_join(k3, '-', 
'null') FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_contains(k2, 1) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_contains(k3, 'a') FROM ${tableName} ORDER BY 
k1"
@@ -66,14 +85,20 @@ suite("test_array_functions") {
     qt_select "SELECT k1, array_contains(k5, 'hi') FROM ${tableName} ORDER BY 
k1"
     qt_select "SELECT k1, array_contains(k5, 'hi222') FROM ${tableName} ORDER 
BY k1"
     qt_select "SELECT k1, array_contains(k6, null) from ${tableName} ORDER BY 
k1"
+    qt_select "SELECT k1, array_contains(k8, cast('2023-02-05' as datev2)) 
FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_contains(k10, cast('2022-10-15 10:30:00.999' 
as datetimev2(3))) FROM ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_enumerate(k2) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_enumerate(k5) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_enumerate(k6) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_enumerate(k7) from ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_enumerate(k8) from ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_enumerate(k10) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_popback(k2) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_popback(k5) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_popback(k6) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_popback(k7) from ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_popback(k8) from ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_popback(k10) from ${tableName} ORDER BY k1"
     qt_select "SELECT k1, array_with_constant(3, k1) from ${tableName} ORDER 
BY k1"
     qt_select "SELECT k1, array_with_constant(10, null) from ${tableName} 
ORDER BY k1"
     qt_select "SELECT k1, array_with_constant(2, 'a') from ${tableName} ORDER 
BY k1"
@@ -88,6 +113,8 @@ suite("test_array_functions") {
     qt_select "SELECT k1, array_position(k5, 'hi') FROM ${tableName} ORDER BY 
k1"
     qt_select "SELECT k1, array_position(k5, 'hi222') FROM ${tableName} ORDER 
BY k1"
     qt_select "SELECT k1, array_position(k6, null) from ${tableName} ORDER BY 
k1"
+    qt_select "SELECT k1, array_position(k8, cast('2023-02-05' as datev2)) 
FROM ${tableName} ORDER BY k1"
+    qt_select "SELECT k1, array_position(k10, cast('2022-10-15 10:30:00.999' 
as datetimev2(3))) FROM ${tableName} ORDER BY k1"
 
     def tableName2 = "tbl_test_array_range"
     sql """DROP TABLE IF EXISTS ${tableName2}"""
@@ -175,7 +202,6 @@ suite("test_array_functions") {
                                             ["2023-01-19 
18:11:11.111111","2023-01-19 18:22:22.222222","2023-01-19 18:33:33.333333"]) """
 
     qt_select_array_datetimev2_1 "SELECT * FROM ${tableName4}"
-    // Todo(Yukang-Lian): will fix if function bugs in the future
     qt_select_array_datetimev2_2 "SELECT if(1,k2,k3) FROM ${tableName4}"
     qt_select_array_datetimev2_3 "SELECT if(0,k2,k3) FROM ${tableName4}"
     qt_select_array_datetimev2_4 "SELECT if(0,k2,k4) FROM ${tableName4}"
diff --git 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
index f60bbaf81a..c7afc7adb4 100644
--- 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
@@ -26,6 +26,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_contains(NULL, 1)"
     qt_sql "select array_contains(NULL, NULL)"
     qt_sql "select array_contains([true], false)"
+    qt_sql "select array_contains(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast 
('2023-02-04 22:07:34.999' as datetimev2(3)))"
+    qt_sql "select array_contains(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))"
 
     // array_position function
     qt_sql "select array_position([1,2,3], 1)"
@@ -42,6 +44,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_position([null, '1'], '')"
     qt_sql "select array_position([''], null)"
     qt_sql "select array_position([false, NULL, true], true)"
+    qt_sql "select array_position(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast 
('2023-02-04 22:07:34.999' as datetimev2(3)))"
+    qt_sql "select array_position(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))"
 
     // element_at function
     qt_sql "select element_at([1,2,3], 1)"
@@ -53,6 +57,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select element_at([1,2,NULL], 2)"
     qt_sql "select element_at([], -1)"
     qt_sql "select element_at([true, NULL, false], 2)"
+    qt_sql "select element_at(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), 1)"
+    qt_sql "select element_at(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)), 2)"
 
     // array subscript function
     qt_sql "select [1,2,3][1]"
@@ -64,6 +70,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select [1,2,NULL][2]"
     qt_sql "select [][-1]"
     qt_sql "select [true, false]"
+    qt_sql "select (array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))[2]"
+    qt_sql "select (array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as 
datev2)))[2]"
 
     // array_aggregation function
     qt_sql "select array_avg([1,2,3])"
@@ -88,6 +96,10 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_product([null])"
     qt_sql "select array_product([1.12, 3.45, 4.23])"
     qt_sql "select array_product([1.12, 3.45, -4.23])"
+    qt_sql "select array_min(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))"
+    qt_sql "select array_max(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))"
+    qt_sql "select array_min(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)))"
+    qt_sql "select array_max(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)))"
 
     // array_distinct function
     qt_sql "select array_distinct([1,1,2,2,3,3])"
@@ -99,6 +111,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_distinct([])"
     qt_sql "select array_distinct([null,null])"
     qt_sql "select array_distinct([1, 0, 0, null])"
+    qt_sql "select array_distinct(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3)),cast 
('2023-02-04 23:07:34.999' as datetimev2(3))))"
+    qt_sql "select array_distinct(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2),cast ('2023-02-05' as datev2)))"
 
 
     // array_remove function
@@ -107,6 +121,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_remove(['a','b','c'], 'a')"
     qt_sql "select array_remove(['a','b','c',null], 'a')"
     qt_sql "select array_remove([true, false, false], false)"
+    qt_sql "select array_remove(array(cast ('2023-02-04 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast 
('2023-02-04 22:07:34.999' as datetimev2(3)))"
+    qt_sql "select array_remove(array(cast ('2023-02-04' as datev2),cast 
('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))"
  
     // array_sort function
     qt_sql "select array_sort([1,2,3])"
@@ -117,6 +133,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_sort(['c','b','a'])"
     qt_sql "select array_sort([true, false, true])"
     qt_sql "select array_sort([])"
+    qt_sql "select array_sort(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))"
+    qt_sql "select array_sort(array(cast ('2023-02-06' as datev2),cast 
('2023-02-05' as datev2)))"
 
     // array_overlap function
     qt_sql "select arrays_overlap([1,2,3], [4,5,6])"
@@ -124,6 +142,10 @@ suite("test_array_functions_by_literal") {
     qt_sql "select arrays_overlap([1,2,3,null], [3,4,5])"
     qt_sql "select arrays_overlap([true], [false])"
     qt_sql "select arrays_overlap([], [])"
+    qt_sql "select arrays_overlap(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select arrays_overlap(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-08 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select arrays_overlap(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast 
('2023-02-05' as datev2)))"
+    qt_sql "select arrays_overlap(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast 
('2023-02-08' as datev2)))"
 
     // array_binary function
     qt_sql "select array_union([1,2,3], [2,3,4])"
@@ -147,8 +169,14 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_union([1], [100000000])"
     qt_sql "select array_except([1], [100000000])"
     qt_sql "select array_intersect([1], [100000000])"
+    qt_sql "select array_union(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select array_except(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select array_intersect(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select array_union(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast 
('2023-02-05' as datev2)))"
+    qt_sql "select array_except(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast 
('2023-02-05' as datev2)))"
+    qt_sql "select array_intersect(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast 
('2023-02-05' as datev2)))"
 
-    // arrat_slice function
+    // array_slice function
     qt_sql "select [1,2,3][1:1]"
     qt_sql "select [1,2,3][1:3]"
     qt_sql "select [1,2,3][1:5]"
@@ -158,6 +186,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select [1,2,3][0:]"
     qt_sql "select [1,2,3][-5:]"
     qt_sql "select [true, false, false][2:]"
+    qt_sql "select (array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))[1:2]"
+    qt_sql "select (array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as 
datev2)))[1:2]"
 
     // array_join function 
     qt_sql "select array_join([1, 2, 3], '_')"
@@ -183,6 +213,8 @@ suite("test_array_functions_by_literal") {
     qt_sql "select array_compact(['a','b','c','c','d'])"
     qt_sql "select array_compact(['aaa','aaa','bbb','ccc','ccccc',null, 
null,'dddd'])"
     qt_sql "select array_compact(['2015-03-13','2015-03-13'])"
+    qt_sql "select array_compact(array(cast ('2023-02-06 22:07:34.999' as 
datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3)), cast 
('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as 
datetimev2(3))))"
+    qt_sql "select array_compact(array(cast ('2023-02-06' as datev2), cast 
('2023-02-05' as datev2), cast ('2023-02-07' as datev2), cast ('2023-02-05' as 
datev2)))"
 
     qt_sql "select array(8, null)"
     qt_sql "select array('a', 1, 2)"
diff --git 
a/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
 
b/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
index 311e310065..59d0a90413 100644
--- 
a/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
@@ -31,6 +31,12 @@ suite("test_cast_string_to_array") {
     // cast string to array<date>
     qt_sql """ select cast ("[2022-09-01]" as array<date>) """
 
+    // cast string to array<datev2>
+    qt_sql """ select cast ("[2022-09-01]" as array<datev2>) """
+
+    // cast string to array<datetimev2>
+    qt_sql """ select cast ("[2022-09-01]" as array<datetimev2>) """
+
     // cast empty value
     qt_sql """ select cast ("[1,2,3,,,]" as array<int>) """
     qt_sql """ select cast ("[a,b,c,,,]" as array<string>) """


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to