Mysql强制类型转换

项目要求: 将表中请求操作时间大于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)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

不知道这铺天盖地的 int 到底是怎么编译通过的.....╭(╯^╰)╮

↓ ↓

update TableName set   XXX where cast(time_cha as signed) >60;


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值