diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java index e58758e878..fa3d123eef 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java @@ -147,19 +147,55 @@ public class ExtWhere2Str { if (value.contains(SQLConstants.EMPTY_SIGN)) { whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; } else { - if (StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR") - || StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) { - whereValue = "(" + value.stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")"; + // tree的情况需额外处理 + if (request.getIsTree()) { + List datasetTableFieldList = request.getDatasetTableFieldList(); + boolean hasN = false; + for (DatasetTableFieldDTO dto : datasetTableFieldList) { + if (StringUtils.containsIgnoreCase(dto.getType(), "NVARCHAR") + || StringUtils.containsIgnoreCase(dto.getType(), "NCHAR")) { + hasN = true; + break; + } + } + if (hasN) { + whereValue = "(" + value.stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")"; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + if (StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR") + || StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) { + whereValue = "(" + value.stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")"; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { - if (StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR") - || StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) { - whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value.get(0) + "%'"; + // tree的情况需额外处理 + if (request.getIsTree()) { + List datasetTableFieldList = request.getDatasetTableFieldList(); + boolean hasN = false; + for (DatasetTableFieldDTO dto : datasetTableFieldList) { + if (StringUtils.containsIgnoreCase(dto.getType(), "NVARCHAR") + || StringUtils.containsIgnoreCase(dto.getType(), "NCHAR")) { + hasN = true; + break; + } + } + if (hasN) { + whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value.get(0) + "%'"; + } else { + whereValue = "'%" + value.get(0) + "%'"; + } } else { - whereValue = "'%" + value.get(0) + "%'"; + if (StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR") + || StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) { + whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value.get(0) + "%'"; + } else { + whereValue = "'%" + value.get(0) + "%'"; + } } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { if (request.getDatasetTableField().getDeType() == 1) {