insert语句插数据入表的时候,Date带毫秒,并且会进1. 2022-06-18 01:07:18.523 入表时间为2022-06-18 01:07:19

在数据库操作中,由于日期时间带有毫秒并可能导致进位,从而影响分片查询的结果。文章介绍了在插入数据时,毫秒超过500会导致入库时间进1秒的问题,这在按日期进行库内分表的场景下尤为关键。为解决这个问题,提出了两种解决方案:一是使用Calendar设置毫秒为0,二是通过字符串切割来处理时间。这两种方法能确保入表时间和查询条件的一致性,避免查询结果出现空缺。
摘要由CSDN通过智能技术生成

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值