项目要求: 将表中请求操作时间大于60分钟的用户的信息删除。
问题来了:建表的时候为了方便,全部字段都是用String 类型存储的(为了方便包装成Json给前端传值)。但是用户创建的时间create_time为了使用mysql的now()函数,定义为了date类型,而返回时间差是要传给前台所以定义的是String类型。
第一:获得时间差,需要以分钟计。
因为create_time是调用了now()函数,所以该列记录的值 类似 "2017-2-20 22:44:02",需要先用to_seconds()函数来把时间转化为秒钟。
那么时间差即为:(to_seconds(now())-to_seconds(create_time))
因为要的是分钟,所以(to_seconds(now())-to_seconds(create_time))/60
然后因为保留的小数位太多了,所以我就开始了漫漫保留小数/取整之路...................
总结出来一句话,truncate报错,convert报错,FORMAT报错,cast报错..........
最后总算是找到了一个能用的,floor,向下取整,正好也是我需要的。
↓↓
update TableName set time_cha =(floor((to_seconds(now())-to_seconds(create_time))/60)) where create_time is not null
第二:需要对String 类型的数据强制转换为int类型。
因为直接搜的是强制转换为int类型,所以当时搜出来了 cast(name as int), convert(name,int) 死活不对。
后来才发现类型得是:
BINARY[(N)]CHAR[(N)]DATEDATETIMEDECIMALSIGNED [INTEGER]TIMEUNSIGNED [INTEGER]
不知道这铺天盖地的 int 到底是怎么编译通过的.....╭(╯^╰)╮
↓ ↓
update TableName set XXX where cast(time_cha as signed) >60;