diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index 4a95120d50..a6f626cce2 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -1330,8 +1330,12 @@ public class SQLEvalVisitorUtils { return new BigInteger(val); } catch (NumberFormatException e) { } - - return new BigDecimal(val); + + try { + return new BigDecimal(val); + } catch (NumberFormatException e) { + return 0; + } } public static Date castToDate(Object val) { @@ -1426,6 +1430,18 @@ public class SQLEvalVisitorUtils { if (a == null || b == null) { return null; } + + if(a == EVAL_VALUE_NULL || b == EVAL_VALUE_NULL) { + return null; + } + + if (a instanceof String) { + a = castToNumber((String) a); + } + + if (b instanceof String) { + b = castToNumber((String) b); + } if (a instanceof Long || b instanceof Long) { return castToLong(a).longValue() | castToLong(b).longValue(); @@ -1660,6 +1676,10 @@ public class SQLEvalVisitorUtils { if (a == null || b == null) { return false; } + + if (a == EVAL_VALUE_NULL || b == EVAL_VALUE_NULL) { + return false; + } if (a.equals(b)) { return true;