SQL 如果条件不为空则请求
SQL Request if criteria is not null
我正在尝试编写一个根据多个条件执行搜索的查询。
我当前的 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
你有什么想法吗?
我正在寻找一种解决方案来避免创建尽可能多的查询组合
听起来你应该使用 OR
而不是 AND
:
c.dateCreation IS NULL
OR c.dateCreation > :dateCreation
我正在尝试编写一个根据多个条件执行搜索的查询。
我当前的 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
你有什么想法吗? 我正在寻找一种解决方案来避免创建尽可能多的查询组合
听起来你应该使用 OR
而不是 AND
:
c.dateCreation IS NULL
OR c.dateCreation > :dateCreation