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]