首页 > 解决方案 > snowsql中的整数函数

问题描述

我正在尝试在雪花中运行此查询,但我一直遇到以下错误。有人可以告诉我我做错了什么。我正在尝试获取年龄的整数值。

SELECT DISTINCT Target_quikvalf.MPOLICY
FROM Target_quikvalf
WHERE (((Target_quikvalf.MPOLICY) Like '%N') 
   AND ("DATE" (Target_quikvalf.MISSUE) Between '5/1/2020' And '5/31/2020')
   AND (as_integer((Target_quikvalf.MAGE) / 5)*5))


Error Message:
SQL compilation error: invalid type [FLOAT] for parameter 'AS_INTEGER(variantValue...)'

标签: snowflake-cloud-data-platform

解决方案


应用功能的位置是问题所在。在这里,我们在应用数学计算之前转换数据类型。

您需要将 FLOAT 转换为 INT 可以像这样进行转换:

SELECT DISTINCT Target_quikvalf.MPOLICY
FROM Target_quikvalf
WHERE (((Target_quikvalf.MPOLICY) Like '%N') 
AND ("DATE" (Target_quikvalf.MISSUE) Between '5/1/2020' AND '5/31/2020') 
AND ((cast(Target_quikvalf.MAGE as int) / 5) * 5);

作为替代方案,我们可以尝试使用 TO_NUMBER 将 FLOAT 转换为数字。如果 Target_quikvalf.MAGE 列是变体数据类型,那么您可以像这样运行它(在下面的示例中,我们强制转换后的浮点数没有十分位,并且可以支持低于 1000 的年龄,因为人们可以超过100岁):

SELECT DISTINCT Target_quikvalf.MPOLICY
FROM Target_quikvalf
WHERE (((Target_quikvalf.MPOLICY) Like '%N') 
AND ("DATE" (Target_quikvalf.MISSUE) Between '5/1/2020' AND '5/31/2020') 
AND ((to_number(Target_quikvalf.MAGE, 3, 0) / 5) * 5);

推荐阅读