一、js获取指定月份的最后一天

  使用new Date(year,month,0)的方式:https://www.cnblogs.com/javascript9527/p/12957193.html

//获取当前日期
var now = new Date();
var nowYear = now.getFullYear();//当前年
var nowMonth = now.getMonth()+1; //当前月
var nowDay = now.getDay();//当天

//获取指定年份和月份的该月的最后一天
var lastDay= new Date(nowYear,nowMonth,0).getDate();

 二、使用POI导出excel

   使用HSSF方式可以用纯java代码来读取、写入、修改excel文件,参考如下:

   java导出excel详解:https://blog.csdn.net/w893932747/article/details/89354979
   java导出excel案例:https://www.cnblogs.com/minixiong/p/11149281.html
   springmvc生成excel:https://blog.csdn.net/yudiandemingzi/article/details/80204794

三、java保留两位小数 

double d = 111231.5585;
String.format("%.2f", d);

  java保留两位小数的方法:https://www.cnblogs.com/Renyi-Fan/p/7643764.html

四、数据库知识

 (1)数据排序

         mysql使用order by不起作用:原因是order by是varchar类型的,在字段后面加上"+0"可转换为int类型。

    参考:https://blog.csdn.net/mastertojava/article/details/86075901

 

     mysql中查询数据自定义排序:

mysql中in和order by连用自定义排序
select * from tablename where fieldname in('',,,) order by field(fieldname,'',,,)

查询某个表按照自定义排序
select * from tablename order by field(fieldname,'',,,)

 (2)触发器知识:https://blog.csdn.net/xmzhaoym/article/details/3539410

 (3)数据关联同时删除多张表

数据表关联删除案例:
DELETE project_basic_info,project_invest_info
from project_basic_info left join project_invest_info on project_basic_info.project_basic_info_id  = project_invest_info.project_basic_info_id  
where project_invest_info.tr1_year ="2018"

  关联删除参考:

https://blog.csdn.net/yun__yang/article/details/53485760?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://blog.csdn.net/iteye_9841/article/details/81972477?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.nonecase

 (4)使用group by之后取每组的最后一条数据

     取分组的最新一条数据:https://blog.csdn.net/HXNLYW/article/details/102681680

     思路:查询的表中先进行排序,但是字符串排序需要加limit,时间类型排序不需要加limit;使用max函数进行查找。

     使用limit查询数据表中所有的数据:https://www.inbeijing.org/archives/1524

五、kettle同步数据表

  kettle数据更新课程:https://edu.csdn.net/course/play/22044/262426

 (1)增量更新(没有删除):https://www.jianshu.com/p/720529e627c0。如果要实现删除,可以在开始添加一个执行sql脚本,删除目标表数据

 (2)同步更新(增删改查):进行差异化比对,进行同步,提高速度

 (3)表输入表输出,重新拷贝一份,进行插入

 (4)定时任务设置:新建作业,连接转换,发送邮件。发送邮件设置:https://blog.csdn.net/harry5508/article/details/96484235

  kettle使用教程之数据同步:https://www.cnblogs.com/ywjfx/p/10815102.html

  

  kettle做数据同步总结:

  要求:在数据同步之前先判断data_flag表的状态,如果有状态是A的数据,然后就执行数据更新,数据更新完成之后改变data_flag表为P

  思路:在每个数据表同步之前先做判断,使用switch,由于是根据值去不同的分支,本例中分为两类,有数据,无数据,因此需要在每个转换之前都做判断,如果没有数据为A的,那么就选择空操作,什么也不做,如果有数据为A的,就到数据同步的转换,因为数据同步有原表和目标表两个分支,switch没法同步执行,所以就直接链接到转换,最后把所有需要同步的表都进行串联,最后再进行数据表更新操作,也就是需要一个表一个表同步,否则一个执行完成之后直接修改状态其他表就不再更新,数据更新也做成转换的形式,里面放执行SQL脚本操作,这样当所有的表都进行更新完成之后就会修改表的状态,最后成功。

   如果kettle的switch所有的分支都执行,那么需要把switch的分支替换成trans,即把要执行的内容封装到trans中,然后在switch中调用。kettle的内部运行机制:如果sql没有任何参数,不管放到流程的哪个步骤,都是最先执行的。

  参考:https://wenwen.sogou.com/z/q860012672.htm