You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:46:18