当前位置 博文首页 > iloki的博客:JAVA+SQL 获取最近几天要过生日的人
--oralce
select a.birthday,
from TABLE_USER a
where to_char(a.birthday, 'MMdd') >= to_char(date '2021-06-01', 'MMdd')
and to_char(a.birthday, 'MMdd') <= to_char(sysdate + 5, 'MMdd')
--gbase
select a.birthday,
from TABLE_USER a
where to_char(a.birthday, 'MMdd') >= to_char(sysdate, 'MMdd')
and to_char(a.birthday, 'MMdd') <= to_char(sysdate+ interval(5) day to day, 'MMdd')
private static final ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal= ThreadLocal.withInitial(() -> new SimpleDateFormat("MMdd"));
/**
* 比较日期是否在区间内(月日)
* @param date 日期
* @param dateBefore 开始日期
* @param dateAfter 结束日期
* @return
*/
private boolean isInDateRange(Date date, Date dateBefore, Date dateAfter) {
if(date == null) return false;
String dateFirst = simpleDateFormatThreadLocal.get().format(dateBefore);
String dateLast = simpleDateFormatThreadLocal.get().format(dateAfter);
String dateString = simpleDateFormatThreadLocal.get().format(date);
int dateFirstIntVal = Integer.parseInt(dateFirst);
int dateLastIntVal = Integer.parseInt(dateLast);
int dateStringIntVal = Integer.parseInt(dateString);
if (dateStringIntVal >= dateFirstIntVal && dateStringIntVal <= dateLastIntVal) {
return true;
}
//日期跨年比较
if (dateFirstIntVal > dateLastIntVal) {
//跨年,开始时期和比较时期在同一年 开始:2021-12-01 比较:2021-12-05 结束:2022-01-02
if (dateStringIntVal >= dateFirstIntVal) {
return true;
}
if (dateStringIntVal <= dateLastIntVal) {
//跨年,结束时期和比较时期在同一年 开始:2021-12-01 比较:2022-01-01 结束:2022-01-02
return true;
}
}
return false;
}
/**
* 比较生日是否在区间内(年月日)
*
* @param date 日期
* @param dateBefore 开始日期
* @param dateAfter 结束日期
* @return
*/
private boolean isInBirthdayRange(Date date, Date dateBefore, Date dateAfter) {
if (date == null) return false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateFirst = sdf.format(dateBefore);
String dateLast = sdf.format(dateAfter);
String dateString = sdf.format(new Date()).substring(0,4) + simpleDateFormatThreadLocal.get().format(date);
int dateFirstIntVal = Integer.parseInt(dateFirst);
int dateLastIntVal = Integer.parseInt(dateLast);
int dateStringIntVal = Integer.parseInt(dateString);
if (dateStringIntVal >= dateFirstIntVal && dateStringIntVal <= dateLastIntVal) {
return true;
}
return false;
}
将生日日期拼接成:当前年yyyy+生日月日MMdd,然后把这个日期和开始日期、结束日期比较
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf1 = new SimpleDateFormat("MMdd");
Date date = sdf.parse("19951205");
System.out.println("获取生日的月日:"+sdf1.format(date));
String dateString = sdf.format(new Date()).substring(0,4) + sdf1.format(date);
System.out.println("拼接当前年+出生月日:"+dateString);
输出:
获取生日的月日:1205
拼接当前年+出生月日:20211205
sql:
select to_char(sysdate,'yyyy')||to_char(date '1995-06-01', 'MMdd') as birthday from dual;
cs