diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java index 434f7a6f5bda41..4cf3e57e38e64f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java @@ -38,6 +38,7 @@ import org.apache.doris.nereids.trees.expressions.literal.NullLiteral; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.types.BooleanType; +import org.apache.doris.nereids.types.DataType; import org.apache.doris.nereids.util.ExpressionUtils; import com.google.common.collect.BoundType; @@ -113,8 +114,10 @@ private ValueDesc buildRange(ExpressionRewriteContext context, ComparisonPredica if (right.isNullLiteral()) { return new UnknownValue(context, predicate); } - // only handle `NumericType` and `DateLikeType` - if (right.isLiteral() && (right.getDataType().isNumericType() || right.getDataType().isDateLikeType())) { + // only handle `NumericType` and `DateLikeType` and `StringLikeType` + DataType rightDataType = right.getDataType(); + if (right.isLiteral() && (rightDataType.isNumericType() || rightDataType.isDateLikeType() + || rightDataType.isStringLikeType())) { return ValueDesc.range(context, predicate); } return new UnknownValue(context, predicate); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java index ca2cab9905b1e9..899f342f8a3f54 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java @@ -198,6 +198,8 @@ public void testSimplify() { assertRewrite("(TA + TC > 3 and TA + TC < 1) or TB < 5", "((TA + TC) is null and null) OR TB < 5"); assertRewrite("(TA + TC > 3 OR TA < 1) AND TB = 2) AND IA =1", "(TA + TC > 3 OR TA < 1) AND TB = 2) AND IA =1"); + assertRewrite("SA = '20250101' and SA < '20200101'", "SA is null and null"); + assertRewrite("SA > '20250101' and SA > '20260110'", "SA > '20260110'"); }