Snowflake中基于另一表创建表时筛选数值类型列失效问题
问题分析与解决方案
你遇到的问题根源是对IS_DECIMAL()函数的作用理解有误:
IS_DECIMAL(col2)并非判断col2字段本身的数据类型是否为数值型,而是判断输入的字符串内容是否可以被解析为十进制数值。比如字符串'123.45'会返回1,但它本身还是字符串类型,所以会被保留到新表中。
针对你的需求,分两种场景给出解决方法:
场景1:col2是VARCHAR类型(存储文本内容,包含数值格式字符串和纯字符串)
使用TRY_CAST()函数尝试将字段转换为数值类型,转换失败会返回NULL,以此过滤掉无法转为数值的纯字符串:
CREATE TABLE abc1 AS SELECT * FROM abc WHERE TRY_CAST(col2 AS NUMBER) IS NOT NULL;
场景2:col2是VARIANT类型(混合存储数值、字符串等多种数据类型)
通过TYPEOF()函数直接判断字段存储的实际数据类型,只保留数值/浮点类型的行:
CREATE TABLE abc1 AS SELECT * FROM abc WHERE TYPEOF(col2) IN ('NUMBER', 'FLOAT');
内容的提问来源于stack exchange,提问作者SheCodes
相关产品推荐
相关产品推荐

