关键字
兼容truncate函数、人大金仓、KingbaseES
问题描述
trunc功能:对传入参数按保留位数进行数据截取。
有2种调用形式:
- trunc(dp或numeric)
- trunc(v , s)
函数返回值类型为numeric
第一种调用方式,传参可以是dp number或者numeric类型,若传入浮点数返回类型为numeric,若传入整数返回类型为double precision。
第二种调用方法中传参可以为
- TRUNC(date),TRUNC(date [, fmt ]),传参为date,返回的值始终是数据类型 DATE,如果省略 fmt,则使用默认格式模型’ DD’,并且返回的值将被 date 截断为时间为午夜的日期。
- TRUNC(number),TRUNC(n1 [, n2 ]),传参为number,此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果省略 n2,则 函数返回与参数的数值数据类型相同的数据类型;如果包含 n2,则函数返回 NUMBER。
- TRUNC(text),trunc(text [, int]),第一个参数为 text 文本类型,并且需要为标准数字输入,没有范围限制。如果无法转换为标准数字,则报错。 如果第一个参数为 NULL 则返回 NULL。 第二个参数 int 如果省略,则将 text 文本截断为 0 位(即为整数);如果 int 为负数,则截断小数点左侧的数字位数。
问题分析
关于截断函数trunc,mysql中没有同名函数,但是含有功能相似的truncate函数,为进一步验证两函数功能相同,做了一下测试点:
- 传参个数:kes中的trunc函数可以接受一个或者两个传参,mysql中truncate函数只能接受两个参数;
- 对于超出两个传参时,报错相同;
- 传参最大均接受int8大小
- 两个函数均为输入null,传出null;
- 对于输入相同参数,两函数返回值相同;
- 均支持输入字符串类似‘3’,自动转为int类型;
- 第二个参数为负数时,select truncate(133.223,-1);也都返回130,结果相同
- 对于性能问题,查询100条数据,kes下trunc (cost=0.00..49.55 rows=2260 width=32) (actual time=0.002..0.002 rows=0 loops=1);mysql下truncate (cost=10.25 rows=100) (actual time=0.039..0.214 rows=100 loops=1)
结论
经过以上测试点的测试结果看:
不同点:kes中trunc函数支持一到两个参数,mysql中truncate函数只支持两个参数。Trunc支持第一个参数为字符串形式如‘123.45’自动转化为小数123.45,truncate直接报错。
相同点:主要的截断功能一样,也都支持第二个参数为小数自动四舍五入转化为整数;传参最大可接受范围相同。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




