SQL 獲取指定月份的所有日期,SQL日期分頁
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這個方法改動了一下,主要是這裡取得二個日期間的集合是左右包含,按照分頁要求所以改成左包含右不包含
具體如下:
/**
* 獲取二個日期之間的的所有日期集合
* [email protected]
* 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));
}
相關推薦
SQL 獲取指定月份的所有日期,SQL日期分頁
package awu.demo; import java.util.Date; import java.util.List; import awu.util.DateUtil; public class SQLDemo { /** * @param year 年份 *
oracle sql 獲取本季度所有月份,上季度所有月份
sele oracle div last code col 獲取 trunc rom 上季度所有月份: SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, ‘YYYY‘),A * 3),-ROWNUM),‘YYYYMM‘
sql獲取當前月份的前一月,當前天的前一天,當前年的前一年
ear date() class 獲取 月份 年份 mon sql dateadd 當前年份加減: SELECT CONVERT(varchar(12),DATEADD(year,1,GETDATE()),23) as year SELECT CONVERT(var
sql獲取表的所有字段及屬性
isn when sele length object obj 屬性 表名 inner 1 select 2 c.name as name,t.name as type 3 ,convert(bit,c.IsNullable) as is
用sql獲取資料庫中所有的表名的方法:
1、oracle下:select table_name from all_tables; 2、MySQL下:select table_name from information_schema.tables where table_schema='csdb' and table_type='base
sql按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便
CREATE function Get_StrArrayStrOfIndex ( @str varchar(1024), --要分割的字串 @split varchar(10), --分隔符號 @index int --取第幾個元素 ) returns varchar(1024) as begin decla
獲取指定月份月初,月末時間
$day=date("Y-m-d",time()); $day ="28-03-2015"; $day =date("Y-M-d",strtotime($day)); var_dump(time()); var_dump($day); $day2 = date("Y-m",
nodejs 獲取指定月份最後一天
moment nodejs months nodevar moment = require(‘moment‘);// 獲取指定月份最後一天moment(‘2017-12-24‘).endOf(‘month‘).format("YYYY-MM-DD")2017-07-31// 指定月份加九個月後的最
獲取應用版本號,版本名稱,包名,AppName,圖標,是否是系統應用,獲取手機中所有應用,所有進程
pac version raw 是否 系統 app bsp agen nco PackageManager packageManager = getPackageManager(); PackageInfo packageInfo; = packageManager.get
Scala 獲取指定目錄所有文件
directory puts cto dir list rect tor array 單個 //獲取任意多個目錄下所有文件 def getFiles(inputs: File*): Seq[File] = { inputs.filter(_.isFile) ++
sql獲取隨機記錄(MYSQL,ACCESS,ORACLE,SQL Server)
在SQL Server中可以通過以下方式來取得隨機的前N條記錄select top N * from Table_Name order by newid()--newid()返回全域性(GUID)的 uniqueidentifier 型別的唯一值--N值是你要所取得的記錄數在Access中隨機抽取的
php獲取指定月份月初和月末的時間戳
獲取指定月份的開始時間戳和結束時間戳,只需傳入年月即可(2018-01,2018-1兩種格式都可以) $data['sel_time'] = '2018-11'; $data['begin_time'] = strtotime($data['sel_time']); //指定月份的開始時
獲取指定月份的天數
/** * 獲取某個月的天數 * @param monthyear * @return */ public static int getDaysOfMonth(String monthyear) { Simple
MyBatis的mapper層,簡單的分頁查詢sql語句報錯ORA-00923: 未找到要求的 FROM 關鍵字
<!-- 取得所有租賃合同列表 有分頁 --> <select id="selectListByAllWithPage" resultMap="RentResultMap"> select * from (select *,ROWNUM rn
獲取指定時區的天數,小時數
給定一個當前時間對應的epoch,如何獲取北京時間(GMT+8)的天數天數指的是從1970年1月1日0點開始數的天數看上去很簡單,如果有epoch值t表示當前時間,直接用公式(t-0)/86400秒說明:1. 0表示1970年1月1日0點對應的秒數2. 86400秒錶示一天的
Python指令碼- 遞迴遍歷資料夾,獲取指定副檔名檔案,修改檔案內容
#USAGE: # 1、Choose file path # 2、Choose file type (according to extension name) # 3、Judging condition # 4、The content to insert # 5、Print file pat
mssql sqlserver獲取指定月份當月天數總和
CREATE FUNCTION dbo.fn_getMonthDayAll ---自定義函式名稱 ( @yyyyMM VARCHAR(20) ---指定輸入引數格式 4位年份2位月份 ) RETURNS INT ---函式返回值型別 AS BEGIN DECLARE @dayAll INT
sql server判斷表是否存在,sql server判斷欄位是否存在
sql server判斷表是否存在 select COUNT(*) from dbo.sysobjects where name='t_sys_para'; sql server判斷欄位是否存在 s
MySql實現分頁查詢的SQL,mysql實現分頁查詢的sql語句
refs: http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要: MySQL資料庫實現分頁查詢的SQL語句寫法! 一:分頁需求: 客戶端通過傳遞start(頁碼),limit(每頁顯示的條數
FastJson的使用——複雜的JSON獲取指定的key-value,JSON與list,object的互轉
物件轉JSON String json = JSON.toJSONString(object); JSON轉物件 首先你需要構造一個物件實體類,且還需要攜帶一個無參構造器,比如: @Data public class User implements Seria