diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java index 033bff2afd33dd..54add9565ca9b6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java @@ -174,6 +174,16 @@ public static Expression daysAdd(DateTimeV2Literal date, IntegerLiteral day) { /** * datetime arithmetic function hours-add. */ + @ExecFunction(name = "hours_add", argTypes = {"DATE", "INT"}, returnType = "DATE") + public static Expression hoursAdd(DateLiteral date, IntegerLiteral hour) { + return date.toBeginOfTheDay().plusHours(hour.getValue()); + } + + @ExecFunction(name = "hours_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2") + public static Expression hoursAdd(DateV2Literal date, IntegerLiteral hour) { + return date.toBeginOfTheDay().plusHours(hour.getValue()); + } + @ExecFunction(name = "hours_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME") public static Expression hoursAdd(DateTimeLiteral date, IntegerLiteral hour) { return date.plusHours(hour.getValue()); @@ -187,6 +197,16 @@ public static Expression hoursAdd(DateTimeV2Literal date, IntegerLiteral hour) { /** * datetime arithmetic function minutes-add. */ + @ExecFunction(name = "minutes_add", argTypes = {"DATE", "INT"}, returnType = "DATE") + public static Expression minutesAdd(DateLiteral date, IntegerLiteral minute) { + return date.toBeginOfTheDay().plusMinutes(minute.getValue()); + } + + @ExecFunction(name = "minutes_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2") + public static Expression minutesAdd(DateV2Literal date, IntegerLiteral minute) { + return date.toBeginOfTheDay().plusMinutes(minute.getValue()); + } + @ExecFunction(name = "minutes_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME") public static Expression minutesAdd(DateTimeLiteral date, IntegerLiteral minute) { return date.plusMinutes(minute.getValue()); @@ -200,6 +220,16 @@ public static Expression minutesAdd(DateTimeV2Literal date, IntegerLiteral minut /** * datetime arithmetic function seconds-add. */ + @ExecFunction(name = "seconds_add", argTypes = {"DATE", "INT"}, returnType = "DATE") + public static Expression secondsAdd(DateLiteral date, IntegerLiteral second) { + return date.toBeginOfTheDay().plusSeconds(second.getValue()); + } + + @ExecFunction(name = "seconds_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2") + public static Expression secondsAdd(DateV2Literal date, IntegerLiteral second) { + return date.toBeginOfTheDay().plusSeconds(second.getValue()); + } + @ExecFunction(name = "seconds_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME") public static Expression secondsAdd(DateTimeLiteral date, IntegerLiteral second) { return date.plusSeconds(second.getValue()); @@ -380,4 +410,14 @@ public static Expression dateDiff(DateTimeV2Literal date1, DateTimeV2Literal dat private static int dateDiff(LocalDateTime date1, LocalDateTime date2) { return ((int) ChronoUnit.DAYS.between(date2.toLocalDate(), date1.toLocalDate())); } + + @ExecFunction(name = "to_days", argTypes = {"DATE"}, returnType = "INT") + public static Expression toDays(DateLiteral date) { + return new IntegerLiteral((int) date.getDay()); + } + + @ExecFunction(name = "to_days", argTypes = {"DATEV2"}, returnType = "INT") + public static Expression toDays(DateV2Literal date) { + return new IntegerLiteral((int) date.getDay()); + } }