SQL 获取指定月份的所有日期,SQL日期分页
来源:互联网 发布:如何封装js 编辑:程序博客网 时间:2024/05/07 05:32
package awu.demo;import java.util.Date;import java.util.List;import awu.util.DateUtil;public class SQLDemo {/*** @param year 年份* @param month 月份* @return 生成的sql 语句 如果是当前月份 则返回本月第一天到今天的所有日期*/public static String getDateSqlByYearMonth(int year, int month) { Date sDate = DateUtil.getMonthFirstDay(DateUtil.getTargetDateOfMonth(year, month)); String sDateStr = DateUtil.getMonthFirstDayStr(new Date()); Date eDate = DateUtil.getMonthLastDay(DateUtil.getTargetDateOfMonth(year, month)); String dateStr = year+"-"; if(month<10){ dateStr+="0"+month; }else{ dateStr+=month; } if(dateStr.equals(DateUtil.getCurDateOfYearmonth())){ eDate = new Date(); } if((dateStr+"-01").equals(sDateStr)){ sDate = DateUtil.getLastMonthAfterDay(); } String dateSql = createDateSql(eDate,sDate); return dateSql; }/*** 生成 sql 语句*/private static String createDateSql(Date endDate,Date startDate){ StringBuffer dateStr = new StringBuffer("select xyz.dt from ("); try { List<String> list = DateUtil.getDaysBetweenStartDateAndEndDate(startDate, endDate); for(int i=0;i<list.size();i++){ if(i==0){ dateStr.append("select '").append(list.get(i)).append("' as dt"); }else{ dateStr.append(" UNION ALL select '").append(list.get(i)).append("' as dt"); } } dateStr.append(" ) xyz"); } catch (Exception e) { e.printStackTrace(); } return dateStr.toString(); }}
日期操作类
package awu.util;import java.sql.Timestamp;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;/** * 对日期的运算操作 * */public class DateUtil { public static final SimpleDateFormat SDF_MD = new SimpleDateFormat("MM-dd"); public static final SimpleDateFormat SDF_DATE = new SimpleDateFormat("yyyy-MM-dd"); public static final SimpleDateFormat SDF_DATE_MONTH = new SimpleDateFormat("yyyy-MM"); public static final SimpleDateFormat SDF_SECOND_MILLISECOND = new SimpleDateFormat("SSsss"); /*** 获取日期所在月份的第一天* @param date* @return*/public static <T extends Date> T getMonthFirstDay(final T date) {if(date == null) { return null; }final String dateStr = format(date, "yyyy-MM") + "-01";final Long mill = parseDate(dateStr).getTime();final T another = (T) date.clone();another.setTime(mill);return another;}/** * 格式化日期 * @param date * @return */public static String getMonthFirstDayStr(Date date){ Date d = getMonthFirstDay(date); return format(date, "yyyy-MM-dd");}/***获取日期所在月份的最后一天* @param days* @return*/public static <T extends Date> T getMonthLastDay(final T date){if(date == null) { return null; }final Calendar c = Calendar.getInstance();c.setTime(date);final String dateStr = format(date, "yyyy-MM") + "-" + c.getActualMaximum(Calendar.DAY_OF_MONTH);final Long mill = parseDate(dateStr).getTime();final T another = (T) date.clone();another.setTime(mill);return another;}/**** @param days* @return*/获取当前日期public static String getCurDateOfYearmonth(){ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); return dateFormat.format(new Date()); }/*** 获取上个月最后一天的日期*/public static Date getLastMonthAfterDay(){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.DATE, -1); return calendar.getTime(); }}测试package awu.demo;public class test {public static void main(String[] args) {System.out.println(SQLDemo.getDateSqlByYearMonth(2016, 9));System.out.println(SQLDemo.getDateSqlByYearMonth(2015, 2));}}
执行生成的sql结果如图
扩展
根据日期分页
/*** @param from-当前页 从1开始 第一页从当前日期开始往前推rows天 * @param rows-每页数据条数*/public static String getDateSqlByForPage(int from, int rows) {String dateSql = "";Date eDate = new Date();Date sDate = new Date();try {if(from == 1){sDate = DateUtil.addDayByTarDate(new Date(),-rows);}else{sDate = DateUtil.addDayByTarDate(new Date(),-(from)*rows);eDate = DateUtil.addDayByTarDate(sDate,rows);}dateSql = createDateSql(eDate,sDate);} catch (Exception e) {e.printStackTrace();} return dateSql; }
注意:这里DateUtil中的getDaysBetweenStartDateAndEndDate这个方法改动了一下,主要是这里取得二个日期间的集合是左右包含,按照分页要求所以改成左包含右不包含
具体如下:
/** * 获取二个日期之间的的所有日期集合 * dwzhou@atman.com * 2016年6月6日下午2:57:23 */ public static List<String> getDaysBetweenStartDateAndEndDate(Date startDate,Date endDate){ List<String> list = new ArrayList<String>(); Calendar cd = Calendar.getInstance(); cd.setTime(startDate); while(startDate.getTime()-endDate.getTime()<0){ startDate = cd.getTime(); cd.add(Calendar.DATE, 1); list.add(SDF_DATE.format(startDate)); } if(list!=null && list.size()>1){ list = list.subList(0, list.size()-1); } return list; }
执行一下生成的sql语句就可以看到效果了
public static void main(String[] args) {
System.out.println(getDateSqlByForPage(1,20));
System.out.println(getDateSqlByForPage(2,20));
System.out.println(getDateSqlByForPage(3,20));
System.out.println(getDateSqlByForPage(4,20));
}
1 0
- SQL 获取指定月份的所有日期,SQL日期分页
- SQL语句获取日期的月份
- SQL Server中获取指定时间段内的所有日期
- 在SQL SERVER 中获取指定连续月份的旬的日期范围
- sql server 返回2个日期之间的所有月份
- 通过SQL语句来造出两个日期之间的所有月份
- SQL Server中获取指定时间段内的所有月份
- 获取两个日期之间的所有月份
- sql 获取当前日期的季度,年份,月份等日期部分
- SQL 获取指定月份的天数
- js得到连两个时间段之间所有的年-月 获取当前日期 格式化日期 根据指定日期得到该日期该月份的最后一天
- sql 指定日期查询
- 将指定日期所在月份的所有日期按照周次输出
- SQL中获取指定两个日期时间点或者时间段内所有记录语句
- 根据当前日期获取当月内所有日期的SQL语句
- SQL 查询指定日期的记录
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- [LeetCode] 174. Dungeon Game
- was使用命令创建概要文件
- 342. Power of Four
- Shell 企业29道面试题 [转]
- 10:字符个数统计
- SQL 获取指定月份的所有日期,SQL日期分页
- Shell 基础介绍 [1]
- Android studio: The number of method references in a .dex file cannot exceed 64K. Learn how to resol
- Shell 变量及函数讲解 [2]
- 让我们来谈谈分工
- 数据结构(4)—— 栈、队列代码重构实现
- processing基础1
- Linux 字体颜色设置
- SDNU 1303.A+B(高精度) ......