开发中经常遇到某些有相同字段属性的数据,系统要求新增或编辑时需要校验某字段的值在其他数据中没有相同区间的值。 以时间字段为例子,假如在表a中有 sys_policy_no 相同的很多数据,在新增或编辑时需要校验effect_date起始时间与end_date 终止时间与其他数据不能有重叠部分,可以通过sql查询数量来解决:
SELECT count(0) FROM 表名
WHERE
sys_policy_no = #{sysPolicyNo}
AND (
(
<![CDATA[effect_date > #{effectDate}
AND effect_date < #{endDate}]]>
)
OR (
<![CDATA[effect_date < #{effectDate}
AND end_date > #{endDate}]]>
)
OR (
<![CDATA[end_date > #{effectDate}
AND end_date < #{endDate}]]>
)
)