insert语句插数据入表的时候,Date带毫秒,并且会进1
先来看一下SQL,如下:
insert into mcc_advice_his (ADVICE_ID, ADVICE_TYPE, SUBS_ID, CUST_ID, PREFIX , ACC_NBR, MSG, MSG_PARAM, CREATED_DATE, STATE , STATE_DATE, COMMENTS, SENDER_PARAM, SENDED_DATE, EXP_DATE , DELAY_TIME, MESSAGE_ID, TIMES, TIME_INTERVAL, PART_ID , COM_ACCT_ID, ADVICE_SOURCE, ADVICE_SOURCE_ID) values (68957033, 302, 3005582, null, '63' , '9911700009', 'this notification just for test deeplink: ', '', '2022-06-18 01:11:14.000', 'C' , '2022-06-18 01:11:14.813', 'ctgmq messageId:0A1A039900002455000000622FBC23BD', '{"user_message_reference":"13161"}', null, null , null, null, null, null, 2 , null, 1, 68679810)
我们会发现,2022-06-18 01:11:14.813中是带有毫秒的,当这个毫秒超过500的时候,入库时间为:2022-06-18 01:11:15
为什么要在一这一毫秒呢?
场景:比如我们有一个mcc_contact表,这个表的数据特别大,我们做了分片的同时,根据createDate字段又做了一个库内分表,每一个月分一个表。这样我们每次去查询mccContact表的数据的时候,我们就需要带上CreateDate字段去查找。
如果不在意入表的这一毫秒误差,就会导致查出来数据为空。
解决方法:
一:使用calendar.set(Calendar.MILLISECOND, 0)方法
// 对Date毫秒数清0
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
// 按时分秒,毫秒域清0
calendar.set(Calendar.MILLISECOND, 0);
Date time = calendar.getTime();
二:切割
String DateNow = DateUtil.formatString(new Date(), "yyyyMMddHHmmss");
Date date = MccmDateUtil.string2Date(DateNow);
advice.setCreatedDate(date)