diff --git a/pkg/sql/plan2/build_function.go b/pkg/sql/plan2/build_function.go
index 416a5866bf2265f4d534d28238005e50ca6c20c0..e90c70f185feb00ff4dcc72f276a1a88d82db1b5 100644
--- a/pkg/sql/plan2/build_function.go
+++ b/pkg/sql/plan2/build_function.go
@@ -241,6 +241,20 @@ func resetIntervalFunctionExprs(dateExpr *Expr, intervalExpr *Expr) ([]*Expr, er
 		return nil, err
 	}
 
+	// rewrite "date '2020-10-10' - interval 1 Hour" to date_add(datetime, 1, hour)
+	if dateExpr.Typ.Id == plan.Type_DATE {
+		switch returnType {
+		case types.Day, types.Week, types.Month, types.Quarter, types.Year:
+		default:
+			dateExpr, err = appendCastExpr(dateExpr, &plan.Type{
+				Id:   plan.Type_DATETIME,
+				Size: 8,
+			})
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
 	return []*Expr{
 		dateExpr,
 		{