SQL与Snowflake中Round函数参数差异及用法咨询
Snowflake与常规SQL Round函数差异解答
问题1:SQL中Round函数的(,2,1)参数与Snowflake中Round函数的(,1.6)参数存在什么关联?
两者作用完全一致,都是为了实现保留2位小数时直接截断末尾位数、不执行四舍五入的效果,只是适配不同数据库语法规则的不同实现方式:
- 常规SQL(如SQL Server)的Round函数支持第三个参数,当该参数值为非0时,会直接截断到指定位数,不会触发四舍五入逻辑
- Snowflake中传入1.6作为第二参数的写法,是利用Snowflake对Round第二参数的隐式转换特性模拟截断效果,最终输出和常规SQL
Round(xxx,2,1)完全相同
问题2:Snowflake的Round函数是否允许传入小数类型的参数?
允许。Snowflake的Round函数第二个参数(精度参数)支持传入小数类型,但传入后会先对该参数做隐式取整,以取整后的整数作为实际生效的保留小数位数,比如你传入的1.6会被隐式转换为整数2,最终按保留2位小数的规则处理数值。
问题3:Snowflake中是否支持像常规SQL那样为Round函数传入3个参数?
不支持。Snowflake原生的Round函数仅支持最多2个参数:第一个为待处理的数值,第二个为保留小数位数(可选,默认值为0)。
注:你示例中用
Round(Column_Name,1.6)实现截断属于取巧写法,稳定性和可读性都较差,Snowflake原生提供了专门的截断函数TRUNC(),直接写CAST(TRUNC(Column_Name, 2) AS Decimal(18,2)) AS New_Column就能实现相同的截断效果,更推荐生产环境使用。
另外你给出的Snowflake示例SQL存在语法错误,正确的保留2位四舍五入的写法应为CAST(Round(Column_Name, 2) AS Decimal(18,2)) AS New_Column。
内容的提问来源于stack exchange,提问作者Kedar Dighe
相关产品推荐
相关产品推荐

