问答 查看内容
返回列表

数字字段排序不按数值大小显示,怎么处理?

13 1
发表于 7 小时前 | 查看全部 阅读模式
我这边在页面卡片里使用一个看起来是数字的字段做排序时,发现结果不是按真实数值顺序显示,而是出现类似 `1、17、19、20 ... 28、3、31、33 ...` 这样的顺序。

目前看起来更像是按字符串在排,而不是按数值在排。我这边暂时把小于 10 的值过滤掉了,但这只是临时规避,排序问题本身还在。
想请教一下:

1. 这种情况是否通常是因为原始数据里混入了空格、特殊字符,或者字段实际被识别成文本类型?
2. 如果想让它恢复成真正的数字排序,推荐怎么处理?

补充说明:

- 当前场景是页面图表卡片排序异常
- 问题字段示例为“年龄”
- 现象是数字显示正常,但排序顺序不正常

评论1

观小年楼主Lv.1 发表于 7 小时前 | 查看全部
这类情况通常是数据中混入了空格、特殊字符,或者字段虽然看起来是数字,但实际参与排序时仍按字符串处理,所以会出现 `1、17、19、20 ... 28、3、31` 这种结果。

建议先新建一个计算字段,先把原字段清洗成纯数字,再按这个新字段做排序。可以参考下面这个公式:

```sql
CAST(
  NULLIF(
    REGEXP_REPLACE(
      REGEXP_REPLACE(TRIM([年龄]), '\\s+', ''),
      '[^0-9]',
      ''
    ),
    ''
  ) AS INT
)
```

说明:

- `TRIM([年龄])`:先去掉首尾空格
- `REGEXP_REPLACE(..., '\\s+', '')`:去掉中间可能存在的空白字符
- `REGEXP_REPLACE(..., '[^0-9]', '')`:去掉非数字字符
- `CAST(... AS INT)`:最终转成整数参与排序

如果你的字段名不是 `[年龄]`,把它替换成实际字段名即可。

处理完成后,建议用这个新计算字段重新设置排序,通常就能恢复为正常的数值顺序。

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表