我正在尝试编写一个查询。
下面是到目前为止的查询。
@Query(value = "select cn from CapNumber cn " +
"WHERE (:#{#request.number} = '' OR cn.number LIKE CONCAT('%',:#{#request.number},'%')) " +
"AND (:#{#request.name} IS '' OR cn.name LIKE CONCAT('%',:#{#request.name},'%') )" +
"AND (:#{#request.smsStatus} IS '' OR cn.smsStatus = :#{#request.smsStatus} )" +
"AND (:#{#request.internalId} IS '' OR cn.internalId LIKE CONCAT('%',:#{#request.internalId},'%') )")
Page<CapNumber> search(NumbersRequest request, Pageable pageable);
如果smsStatus为“”,则根据当前查询为否。如果传递的关键字正确,则将获取所有记录和数据。
现在我想要所有的记录中的smsStatus是空的,不知道我怎么做。我知道我必须使用的情况下是空的,但不知何故,我尝试了什么是不工作。
谁能帮帮忙
2条答案
按热度按时间k5hmc34c1#
您可以使用
IS NULL
检查对参数未设置值的逻辑分支执行no-op操作。euoag5mw2#
您可以添加
COALESCE(cn.smsStatus,'NULL') = :#{#request.smsStatus}
如果request.smsstatus为“NULL”(字符串),则在cn.smsstatus为NULL时条件将变为真,因为
COALESCE
将采用第一个NOT NULL值。