atitit.判斷時間重疊方法總結 java c++ c#.net js php,

來源:互聯網
上載者:User

atitit.判斷時間重疊方法總結 java c++ c#.net js php,

atitit.判斷時間重疊方法總結 java c++ c#.net  js php

 

1. 判斷時間重疊具體流程思路 1

2. 重疊演算法 實際上就是日期集合跟個時間集合的的交集(乘法演算法) 1

3. 代碼--- 1

4. 最終產生的sql 3

5. 參考 5

 

1. 判斷時間重疊具體流程思路

先判斷日期重疊,在判斷時間區段重疊。

每個區段都有內包含,外包含,左包含,右包括...所以,or運算式需要4*4=16個..每個or 運算式包括4個and運算式( 兩個日期運算式,兩個時間範圍運算式)

最終的最終的的運算式需要16*4=64個,,比較長的了..

 

作者:: 老哇的爪子 Attilax 艾龍,  EMAIL:1466519819@qq.com

轉載請註明來源: http://blog.csdn.net/attilax

 

2. 重疊演算法 實際上就是日期集合跟個時間集合的的交集(乘法演算法)

在程式設計裡有。。。。。

回答

那實際上就是交、並、差。
所謂加,實際上就是求兩個集合的並集
減,就是求兩個集合的差集
乘,就是求兩個集合的並集
它們都是從邏輯的運算推出來的

 另外更正一下:乘是求兩個集合的交集。

 

 

3. 代碼---

private void ini() {

String db_start_fld = "start_time";

String db_end_fld = "end_time";

String db_include_exp = "db_start_fld>=ui_start and db_end_fld<=ui_end ";

String db_outclude_exp = "db_start_fld<=ui_start and db_end_fld>=ui_end ";

String db_leftinclude_exp = "db_end_fld>=ui_start and db_end_fld <=ui_end ";

String db_ritinclude_exp = "db_start_fld>=ui_start and db_end_fld<=ui_end ";

 

 

List<String> dateExpList = new ArrayList<String>() {

{

 

add(expandFunc(db_include_exp));

add(expandFunc(db_outclude_exp));

add(expandFunc(db_leftinclude_exp));

add(expandFunc(db_ritinclude_exp));

 

}

 

private String expandFunc(String db_include_exp) {

String db_start_fld_Datefunc = "  CONVERT(varchar(100), db_start_fld, 23)";

String db_end_fld_Datefunc = "  CONVERT(varchar(100), db_end_fld, 23)";

return db_include_exp.replaceAll("db_start_fld",

db_start_fld_Datefunc).replaceAll("db_end_fld",

db_end_fld_Datefunc);

}

};

 

List<String> timeExpList = new ArrayList<String>() {

{

add(expandFunc(db_include_exp));

add(expandFunc(db_outclude_exp));

add(expandFunc(db_leftinclude_exp));

add(expandFunc(db_ritinclude_exp));

 

}

 

private String expandFunc(String db_include_exp) {

String db_start_fld_Timefunc = "  CONVERT(varchar(100), db_start_fld, 8)";

String db_end_fld_Timefunc = "  CONVERT(varchar(100), db_end_fld, 8)";

return db_include_exp.replaceAll("db_start_fld",

db_start_fld_Timefunc).replaceAll("db_end_fld",

db_end_fld_Timefunc);

}

};

List<String>  finalList= new ArrayList<String>() {{

for (String dateExp : dateExpList) {

for (String timeExp : timeExpList) {

this.add(dateExp+" and "+timeExp.replaceAll("db_start_fld", db_start_fld).replaceAll("db_end_fld", db_end_fld));

}

}

}};

String sql=new ArrayList(){

private String exec( ) {

String exp_final=" 1=1 ";

for (String exp : finalList) {

//if(exp_final.length()==0)

exp_final=exp_final + " or ( "+exp +" ) ";

}

return exp_final;

 

}}.exec( );

System.out.println(sql);

 

}

 

4. 最終產生的sql

 

 

SELECT *

FROM tab

WHERE 1=1

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)<=ui_start

      AND CONVERT(varchar(100), end_time, 8)>=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), end_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8) <=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end

      AND CONVERT(varchar(100), start_time, 8)<=ui_start

      AND CONVERT(varchar(100), end_time, 8)>=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end

      AND CONVERT(varchar(100), end_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8) <=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end

      AND CONVERT(varchar(100), start_time, 8)<=ui_start

      AND CONVERT(varchar(100), end_time, 8)>=ui_end)

  OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end

      AND CONVERT(varchar(100), end_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8) <=ui_end)

  OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)<=ui_start

      AND CONVERT(varchar(100), end_time, 8)>=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), end_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8) <=ui_end)

  OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start

      AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end

      AND CONVERT(varchar(100), start_time, 8)>=ui_start

      AND CONVERT(varchar(100), end_time, 8)<=ui_end)

 

 

5. 參考

java 時間段重合時間差 - 天才少年程式員-李榮盛專欄 - 部落格頻道 - CSDN.NET

JAVA中如何判斷兩個時間段是否有交集-CSDN論壇-CSDN.NET-中國最大的IT技術社區

比較兩個日期間隔是否有碰撞的工具類,判斷兩個時間區間是否有交集(單位天) Java - 和申的日誌 - 網易部落格

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.