diff --git a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java index d46bb49f96b70..babedb4b245a0 100644 --- a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java +++ b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rewrite/scalar/ImplicitCastRule.java @@ -134,7 +134,8 @@ public ScalarOperator visitBinaryPredicate(BinaryPredicateOperator predicate, } // we will try cast const operator to variable operator - if (rightChild.isVariable() != leftChild.isVariable()) { + if ((rightChild.isVariable() && leftChild.isConstantRef()) || + (leftChild.isVariable() && rightChild.isConstantRef())) { int constant = leftChild.isVariable() ? 1 : 0; int variable = 1 - constant; Optional optional = optimizeConstantAndVariable(predicate, constant, variable); diff --git a/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java b/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java index eb249b916e8e0..cecefb674f424 100644 --- a/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/sql/plan/ExpressionTest.java @@ -1424,4 +1424,11 @@ public void testCastStringDouble() throws Exception { connectContext.getSessionVariable().setCboEqBaseType("VARCHAR"); } } + + @Test + public void testCastConstantFn() throws Exception { + String sql = "select 2011-12-01 = id_date from test_all_type"; + String plan = getFragmentPlan(sql); + assertContains(plan, " CAST(9: id_date AS DOUBLE) = 1998.0"); + } }