数据类型转换是一个常见的需求,因为有一些函数、或者运算时,对数据类型有严格要求,所以在做运算前,都需要将数据先进行数据类型的转换,此处就需要用到cast,转为string、timestamp、decimal等等
下面的cast函数的一些用法
-- 时间转字符串
select cast(now() as string)
-- 日期转时间
select cast('2022-01-01' as timestamp)
这里顺带分享一下之前遇到的小数后长串数字问题和解决方式:
在计算增长率的时候,我们的计算逻辑基本都是:
计算后保留小数点后4位 - 乘以100 - 加上百分符,一开始我用了round四舍五入,如下:
-- 保留4位小数,四舍五入
select concat(cast(round((16-13)/13 ,4)*100 as string),'%')
-- 输出
23.080000000000002%
但是很明显,你运行了上面那段代码后,他的结果是:23.080000000000002%,这就跟我们的预期违背了;
虽然批量计算时,有一些数据计算是不会有长串小数的问题,但是只要有,就影响到了用户体验感(我是产品),所以后来我改用cast,直接改成decimal类型,就可以解决小数转字符串后出现上传数字的问题了,代码大致如下
-- 先转decimal,再转string,在拼接%
select concat(cast(cast(12.484542184 as decimal(4,2)) as s

本文介绍了数据类型转换在SQL中的重要性,特别是cast函数的使用,如将时间转字符串、日期转时间。同时,针对小数精度问题,提出了使用decimal类型来避免长串小数的解决方案,讲解了decimal(m,n)的用法,并给出了实例。此外,还提醒在使用decimal时要注意除数不为0,以防溢出错误。
最低0.47元/天 解锁文章
854

被折叠的 条评论
为什么被折叠?



