Snowflake含数值与非数值数据的排序异常问题求助
Snowflake混合类型字段排序问题解决办法
你要的是把非数值的错误提示全排在结果最前面,数值按大小正常排序。现在的代码问题出在ISNUMERIC判断不准,有些没法转成数值的字符串会被误判成数值,导致它们出现在结果末尾;另外多余的排序字段也搅乱了结果。
改好的代码
SELECT * FROM your_table ORDER BY -- 非数值标0(排前面),数值标1(排后面) CASE WHEN TRY_CAST("myfield" AS FLOAT) IS NULL THEN 0 ELSE 1 END, -- 非数值按字符串排序(不需要可以删掉),数值按大小排 CASE WHEN TRY_CAST("myfield" AS FLOAT) IS NULL THEN "myfield" END, TRY_CAST("myfield" AS FLOAT)
为啥这么改
- 换
TRY_CAST比ISNUMERIC靠谱:ISNUMERIC会把像'NaN'、'123e'这类字符串当成数值,但其实这些转不成有效的FLOAT,就会导致排序乱套。TRY_CAST直接试转换,转不成返回NULL,一眼就能区分是不是真数值。 - 排序逻辑更清晰:第一行确保所有错误提示排最前面;第二行管非数值之间的排序(不需要就删);第三行让数值按实际大小排。
效果验证
- 所有错误提示类的非数值行都会集中在结果开头
- 数值行从小到大排列(要降序的话,在第三行后面加
DESC就行)
内容的提问来源于stack exchange,提问作者BenTen
相关产品推荐
相关产品推荐

