diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java index 2417d92e89addf3..483483dd59d5219 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java @@ -251,8 +251,8 @@ public DateTimeV2Literal roundCeiling(int newScale) { } public DateTimeV2Literal roundFloor(int newScale) { - // use roundMicroSecond in constructor - return new DateTimeV2Literal(DateTimeV2Type.of(newScale), year, month, day, hour, minute, second, microSecond); + return new DateTimeV2Literal(DateTimeV2Type.of(newScale), year, month, day, hour, minute, second, + microSecond / (int) Math.pow(10, 6 - newScale) * (int) Math.pow(10, 6 - newScale)); } public static Expression fromJavaDateType(LocalDateTime dateTime) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java index 184cf5dbf6342f4..81d09a918af13b2 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java @@ -443,4 +443,17 @@ void testDateTimeV2Scale() { new DateTimeV2Literal(DateTimeV2Type.of(5), "2016-12-31 23:59:59.999999"), new DateTimeV2Literal("2017-01-01 00:00:00.0")); } + + @Test + void testRoundFloor() { + DateTimeV2Literal literal; + literal = new DateTimeV2Literal(DateTimeV2Type.of(6), 2000, 2, 2, 2, 2, 2, 222222); + Assertions.assertEquals(222222, literal.roundFloor(6).microSecond); + Assertions.assertEquals(222220, literal.roundFloor(5).microSecond); + Assertions.assertEquals(222200, literal.roundFloor(4).microSecond); + Assertions.assertEquals(222000, literal.roundFloor(3).microSecond); + Assertions.assertEquals(220000, literal.roundFloor(2).microSecond); + Assertions.assertEquals(200000, literal.roundFloor(1).microSecond); + Assertions.assertEquals(0, literal.roundFloor(0).microSecond); + } }