【问题标题】:SQL Request if criteria is not null如果条件不为空,则 SQL 请求
【发布时间】:2019-03-10 01:29:06
【问题描述】:

我正在尝试编写一个根据多个条件执行搜索的查询。

我当前的 JPA 请求:

@Query("SELECT c FROM Client c " +
    "INNER JOIN c.entite e " +
    "WHERE e.numeroLicence in (:numerosLicence) " +
    "AND (UPPER(c.nom) LIKE CONCAT('%',UPPER(:nom),'%') " +
    "AND (c.prenom IS NOT NULL AND UPPER(c.prenom) LIKE CONCAT('%',UPPER(:prenom),'%')) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateCreation > :dateCreation) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateModification > :dateModification) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateSuppression > :dateSuppression)) ")
Page<Client> recherche(@Param("numerosLicence") ArrayList numerosLicence,
                       @Param("nom") String nom,
                       @Param("prenom") String prenom,
                       @Param("dateCreation") ZonedDateTime dateCreation,
                       @Param("dateModification") ZonedDateTime dateModification,
                       @Param("dateSuppression") ZonedDateTime dateSuppression,
                       Pageable pageable);

问题在于它会自动排除列包含 NULL 的行。

我需要对仅包含数据的列进行选择,如果字段值为 NULL,它将不会尝试执行子句

例如,如果我有一行 firstname 列为 NULL,则该行会自动从结果中排除,而我希望它不测试该列是否为 NULL

你有什么想法吗? 我正在寻找一种解决方案来避免创建尽可能多的查询组合

【问题讨论】:

    标签: java postgresql spring-boot spring-data-jpa jpql


    【解决方案1】:

    听起来你应该使用OR 而不是AND

    c.dateCreation IS NULL
       OR c.dateCreation > :dateCreation
    

    【讨论】:

    • 不,对不起,结果是一样的
    • 抱歉,打错字了。再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多