【问题标题】:Why do the % operators in the query not work for strings containing numbers? (JPA)为什么查询中的 % 运算符不适用于包含数字的字符串? (JPA)
【发布时间】:2021-11-11 10:21:11
【问题描述】:

我有以下疑问:

 @Query("SELECT d FROM CarportLocationEntityView d WHERE d.externalId LIKE %:filterCriteria% OR lower(d.carportName) LIKE lower(concat('%',:filterCriteria,'%')) ")
    List<CarportLocationEntityView> filterCarportList(@Param("filterCriteria") String filterCriteria);

此查询搜索数据库中的两列:

  1. externalId
  2. 车棚名

两列都是字符串类型,其中在 externalId 中始终将数字指定为字符串。如果我应用查询并输入 carportName 的一部分,那么我会得到正确的结果。 但是,如果我过滤一个 externalId 并在参数中只输入一部分 externalId,那么我将得不到任何数据。

例如:localhost:8080/filter?filterCriteria=100 在这里我没有得到任何数据。

但如果我过滤整个 externalId 本地主机:8080/filter?filterCriteria=1000000 然后我得到匹配的数据集。

为什么查询中的 % 运算符不适用于包含数字的字符串?

【问题讨论】:

  • 不幸的是不是真的。这个问题是关于实际的 SQL 查询。我正在使用 JPA 查询。但是感谢您的帮助
  • 和JPA一样
  • 所以我尝试了解决方案,但它们不起作用。 >= 或 concate 或 strval 都不是。我的问题与这个问题的区别在于我有一个字符串字段,我在其中输入数字而不是数字字段。
  • 你将如何编写 SQL?

标签: spring-boot jpa


【解决方案1】:
@Query("SELECT d FROM CarportLocationEntityView d WHERE d.externalId LIKE %:#{#filterCriteria}% OR lower(d.carportName) LIKE %:#{#filterCriteria.toLowerCase()}% ")
List<CarportLocationEntityView> filterCarportList(@Param("filterCriteria") String filterCriteria);

参考:

另见:

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 2012-06-03
    • 2020-12-27
    • 2012-07-30
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多