select
PCC.INVNM custName,
to_char(TO_DATE(pcc.BIRTHDAY, 'yyyyMMdd'),'yyyy/MM/dd') birthday
from PRSP_CRM_CUSTINFO pcc where PCC.DELETE_FLG='0'
<if test="isYears=='0'.toString()">
and to_char(TO_DATE(pcc.BIRTHDAY, 'yyyyMMdd'),'MMdd') >= to_char(sysdate,'MMdd')
and
to_char(TO_DATE(pcc.BIRTHDAY, 'yyyyMMdd'),'MMdd') <![CDATA[ <= ]]> to_char(sysdate+30,'MMdd')
</if>
<if test="isYears=='1'.toString()">
and to_char(TO_DATE(pcc.BIRTHDAY, 'yyyyMMdd'),'MMdd') >= to_char(sysdate,'MMdd')
or
to_char(TO_DATE(pcc.BIRTHDAY, 'yyyyMMdd'),'MMdd') <![CDATA[ <= ]]> to_char(sysdate+30,'MMdd')
</if>
首先根据 当前日期 判断 30天后是否 跨年
/**
* 判断跨年
* @return 不返回true(跨年 返回false)
*/
public static boolean isYares(){
boolean flg=false;
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
Date today = new Date();
Calendar theCa = Calendar.getInstance();
theCa.setTime(today);
theCa.add(theCa.DATE, +30);//最后一个数字30可改,30天的意思
Date start = theCa.getTime();
String endDate = df.format(start);//三十天之前日期
String startDate=df.format(today);
String endYear = endDate.substring(0, 4);
String startYear = startDate.substring(0, 4);
if(endYear.equals(startYear)){
flg=true;
}
return flg;
}
根据这个赋值 isYears 去判断
目前一条SQL 解决的 暂时没看到。所以用了 一个动态sql解决