这类情况通常是数据中混入了空格、特殊字符,或者字段虽然看起来是数字,但实际参与排序时仍按字符串处理,所以会出现 `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)`:最终转成整数参与排序
如果你的字段名不是 `[年龄]`,把它替换成实际字段名即可。
处理完成后,建议用这个新计算字段重新设置排序,通常就能恢复为正常的数值顺序。 |