Mysql强制类型转换

来源:互联网 发布:thinkphp3.2 商城源码 编辑:程序博客网 时间:2024/06/05 11:20

项目要求: 将表中请求操作时间大于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;


2 0
原创粉丝点击