diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java index 27470187eae0d2..83c7157f494647 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java @@ -394,10 +394,19 @@ public LocalDateTime toJavaDateType() { ((int) getHour()), ((int) getMinute()), ((int) getSecond()), (int) getMicroSecond() * 1000); } + /** + * use LocalDateTime create Expression + */ public static Expression fromJavaDateType(LocalDateTime dateTime) { - return isDateOutOfRange(dateTime) - ? new NullLiteral(DateTimeType.INSTANCE) - : new DateTimeLiteral(dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth(), - dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond()); + if (isDateOutOfRange(dateTime)) { + return new NullLiteral(DateTimeType.INSTANCE); + } else { + if (checkRange(dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth()) + || checkDate(dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth())) { + throw new AnalysisException("datetime [" + dateTime + "] is invalid of range"); + } + return new DateTimeLiteral(dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth(), + dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond()); + } } } diff --git a/regression-test/data/nereids_syntax_p0/test_date_sub.out b/regression-test/data/nereids_syntax_p0/test_date_sub.out index b9df7eaa28c432..3d29e141c9789b 100644 --- a/regression-test/data/nereids_syntax_p0/test_date_sub.out +++ b/regression-test/data/nereids_syntax_p0/test_date_sub.out @@ -110,3 +110,9 @@ -- !sql -- 12 +-- !select -- +0000-03-01T16:00 1 + +-- !select -- +0000-03-01T16:00 1 + diff --git a/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy b/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy index 7968b70dee5ec3..87565970298774 100644 --- a/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy +++ b/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy @@ -68,4 +68,14 @@ suite("test_date_sub") { qt_sql """ SELECT TIMESTAMPDIFF(DAY,'2003-02-01','2003-05-01') """ qt_sql """ SELECT TIMESTAMPDIFF(WEEK,'2003-02-01','2003-05-01') """ + qt_select "SELECT DATE_SUB(CAST('0000-02-28 00:00:00' AS DATETIMEV1),interval -40 hour),bit_Test(1,0);" + explain { + sql("SELECT DATE_SUB(CAST('0000-02-28 00:00:00' AS DATETIMEV1),interval -40 hour),bit_Test(1,0);") + contains "hours_sub" + } + qt_select "SELECT DATE_SUB(CAST('0000-02-28 00:00:00' AS DATETIMEV2),interval -40 hour),bit_Test(1,0);" + explain { + sql("SELECT DATE_SUB(CAST('0000-02-28 00:00:00' AS DATETIMEV2),interval -40 hour),bit_Test(1,0);") + contains "hours_sub" + } } \ No newline at end of file