MYSQL—— TIME_TO_SEC函数与UNIX_TIMESTAMP函数区别

今天遇到个需求,统计充电的订单,充电时长,懒得用Java了,直接就在数据库函数搞起来,结果放到线上运行后发现很多充电时长为负数的订单,才发现这个问题。

首先是STR_TO_DATE

这个函数是吧varchar格式的时间转成时间格式, 

STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s')

这样就成时间格式了

然后TIME_TO_SEC

返回 time 参数,转换成秒。可以直接在mysql执行

SELECT TIME_TO_SEC('22:23:00'); 结果为 80580

我的写法是
 (TIME_TO_SEC (STR_TO_DATE(end_charge_time,'%Y-%m-%d %H:%i:%s')) -
 TIME_TO_SEC (STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s'))) EquipmentChargeTime


一般都没问题,可我有个订单时间是end_time:2017-05-10 00:35:28,begin_time:2017-05-09 23:28:11

SELECT TIME_TO_SEC('2017-05-10 00:35:28'); 输出为 2128
SELECT TIME_TO_SEC('2017-05-09 23:28:11'); 输出为 84491
相减就是负数了。

原来 TIME_TO_SEC 是把 时分秒转为 秒,并不会对年月日进行处理

UNIX_TIMESTAMP这个函数返回的是自1970年以来的秒数,所以时间计算用这个是靠谱的
正确使用方式

 (UNIX_TIMESTAMP(STR_TO_DATE(end_charge_time,'%Y-%m-%d %H:%i:%s')) -
 UNIX_TIMESTAMP(STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s'))) EquipmentChargeTime

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值