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

hellostephen 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 f0a10634ebd [Enhancement](cast) Support colon as delimater between 
date and time (#55785)
f0a10634ebd is described below

commit f0a10634ebddc21b188b1e1f5809b318f2f9e99b
Author: zclllyybb <[email protected]>
AuthorDate: Tue Sep 9 10:31:15 2025 +0800

    [Enhancement](cast) Support colon as delimater between date and time 
(#55785)
---
 be/src/util/string_parser.hpp                         |   2 +-
 be/test/vec/function/cast/cast_to_date_test.cpp       |   2 ++
 be/test/vec/function/cast/cast_to_datetime_test.cpp   |   1 +
 .../trees/expressions/literal/StringLikeLiteral.java  |   2 +-
 .../fold_constant/fe_constant_cast_to_date.out        | Bin 2083 -> 2109 bytes
 .../fold_constant/fe_constant_cast_to_datetime.out    | Bin 2927 -> 2966 bytes
 .../fold_constant/fe_constant_cast_to_date.groovy     |   2 ++
 .../fold_constant/fe_constant_cast_to_datetime.groovy |   2 ++
 8 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/be/src/util/string_parser.hpp b/be/src/util/string_parser.hpp
index dc2ba5a02e3..a4d7fa4b245 100644
--- a/be/src/util/string_parser.hpp
+++ b/be/src/util/string_parser.hpp
@@ -150,7 +150,7 @@ inline auto skip_one_slash = skip_qualified_char<1, 
is_slash_ascii>;
 inline auto skip_one_non_alnum = skip_qualified_char<1, is_non_alnum>;
 
 inline bool is_delimiter(char c) {
-    return c == ' ' || c == 'T';
+    return c == ' ' || c == 'T' || c == ':';
 }
 inline auto consume_one_delimiter = skip_qualified_char<1, is_delimiter>;
 
diff --git a/be/test/vec/function/cast/cast_to_date_test.cpp 
b/be/test/vec/function/cast/cast_to_date_test.cpp
index 4a923b0164e..adebf811ec5 100644
--- a/be/test/vec/function/cast/cast_to_date_test.cpp
+++ b/be/test/vec/function/cast/cast_to_date_test.cpp
@@ -160,6 +160,7 @@ TEST_F(FunctionCastTest, 
string_to_date_strict_case_non_strict_mode) {
             {{std::string("24-5-1")}, std::string("2024-05-01")},
             {{std::string("2024-05-01 0:1:2.333")}, std::string("2024-05-01")},
             {{std::string("2024-05-01 0:1:2.")}, std::string("2024-05-01")},
+            {{std::string("2024-05-01:12:12:12")}, std::string("2024-05-01")},
 
             // Compact formats
             {{std::string("20240501 01")}, std::string("2024-05-01")},
@@ -185,6 +186,7 @@ TEST_F(FunctionCastTest, 
string_to_date_strict_case_non_strict_mode) {
             {{std::string("20120102030405")}, std::string("2012-01-02")},
             {{std::string("120102030405.999")}, Null()},
             {{std::string("2024/05/01")}, std::string("2024-05-01")},
+            {{std::string("2024-05-01:12:12:12.1230")}, 
std::string("2024-05-01")},
 
             // Invalid formats (should return NULL)
             {{std::string("19991231T235960.5UTC")}, Null()},
diff --git a/be/test/vec/function/cast/cast_to_datetime_test.cpp 
b/be/test/vec/function/cast/cast_to_datetime_test.cpp
index 5fb3baa2725..7df45edc8b6 100644
--- a/be/test/vec/function/cast/cast_to_datetime_test.cpp
+++ b/be/test/vec/function/cast/cast_to_datetime_test.cpp
@@ -206,6 +206,7 @@ TEST_F(FunctionCastTest, 
string_to_datetime6_strict_case_non_strict_mode) {
             {{std::string("12010203040506.999")}, std::string("1201-02-03 
04:05:06.999000")},
             {{std::string("12010203040506.")}, std::string("1201-02-03 
04:05:06")},
             {{std::string("2024/05/01")}, std::string("2024-05-01")},
+            {{std::string("2024-05-01:12:12:12.1230")}, 
std::string("2024-05-01 12:12:12.123")},
 
             // Invalid formats (should return NULL)
             {{std::string("19991231T235960.5UTC")}, Null()},
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/StringLikeLiteral.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/StringLikeLiteral.java
index 4251cf63bb5..3e3639ae964 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/StringLikeLiteral.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/StringLikeLiteral.java
@@ -60,7 +60,7 @@ public abstract class StringLikeLiteral extends Literal 
implements ComparableLit
             + 
"(?:\\s*(?<tz1>[+-]\\d{1,2}(?::?(?:00|30|45))?|(?i)([A-Za-z]+\\S*)))?)";
     public static final String toDateUnStrictRegex
             = 
"^\\s*((?<year>\\d{2}|\\d{4})[^a-zA-Z\\d](?<month>\\d{1,2})[^a-zA-Z\\d](?<date>\\d{1,2}))"
-            + "(?:[ T]"
+            + "(?:[ T:]"
             + "(?<hour>\\d{1,2})[^a-zA-Z\\d](?<minute>\\d{1,2})[^a-zA-Z\\d](?<"
             + "second>\\d{1,2})(?<fraction>\\.\\d*)?"
             + "(?:\\s*(?<tz>[+-]\\d{1,2}(?::?(?:00|30|45))?"
diff --git 
a/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.out
 
b/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.out
index e8a362320f2..e4c09dd6773 100644
Binary files 
a/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.out
 and 
b/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.out
 differ
diff --git 
a/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.out
 
b/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.out
index 84f4c673730..b18c19abdd6 100644
Binary files 
a/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.out
 and 
b/regression-test/data/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.out
 differ
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.groovy
index d5b4958adf3..ff215cd1dd2 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_date.groovy
@@ -182,4 +182,6 @@ suite("fe_constant_cast_to_date") {
     qt_date45("""select cast("123" as date)""")
     qt_date46("""select cast(1000 as date)""")
     qt_date47("""select cast(-123.123 as date)""")
+
+    qt_date48("""select cast("2020-12-12:12:12:12" as date)""")
 }
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.groovy
index b30cb909643..340b5400a4e 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fe_constant_cast_to_datetime.groovy
@@ -182,4 +182,6 @@ suite("fe_constant_cast_to_datetime") {
     qt_datetime45("""select cast("123" as datetime)""")
     qt_datetime46("""select cast(1000 as datetime)""")
     qt_datetime47("""select cast(-123.123 as datetime)""")
+
+    qt_datetime48("""select cast("2020-12-12:12:12:12" as datetime)""")
 }


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

Reply via email to