【问题标题】:SQLServer concat problem inside Spring Data @QuerySpring Data @Query中的SQL Server concat问题
【发布时间】:2020-08-22 22:42:15
【问题描述】:

我在下面有这个查询,它在 MySql 和 Oracle 上运行良好,但在 SQLServer 上失败:

@Query("SELECT ca FROM ContextAccess ca " + "LEFT JOIN UserContextAccess uca on ca.id = uca.id " +
        "LEFT JOIN RegularUserInfo rui on rui.user = uca.user " +
        "WHERE ca.context = :context and (COALESCE(:roles, null) is null or ca.role in (:roles)) " +
        "AND (:name is null or ca.accessType='GROUP' or CONCAT(rui.firstName,' ',rui.lastName) like CONCAT(:name,'%') " +
        "or CONCAT(rui.lastName,' ',rui.firstName) like CONCAT(:name,'%'))")

我有这个堆栈跟踪:

com.microsoft.sqlserver.jdbc.SQLServerException: The data types varbinary and varchar are incompatible in the add operator.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1624)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:594)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:524)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2979)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:248)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:223)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:446)

问题来自CONCAT(:name,'%') 我可以通过使用像 :name + '%' 这样的 '+' 运算符来解决它,但是在它不适用于 Oracle 之后

你有解决这个问题的想法吗?

谢谢,

【问题讨论】:

    标签: sql-server spring spring-data-jpa


    【解决方案1】:

    您可以使用CONCAT(:name,\"%\")

    双引号字符必须在 Java 字符串文字中用反斜杠转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      • 2012-04-27
      • 2019-03-31
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多