如何在SQL中正确排序物化路径?
解决SQL中字符串类型数值列的数值排序问题
你的Path列存储的是字符串格式的数值,直接使用ORDER BY Path会按照字典序排序(比如"11"会排在"2"前面),要实现按数值大小排序,需要先将列转换为数值类型再排序。
不同数据库的实现方式:
MySQL/MariaDB:
SELECT Path FROM your_table ORDER BY CAST(Path AS DECIMAL) ASC;或者使用
CONVERT函数:SELECT Path FROM your_table ORDER BY CONVERT(Path, DECIMAL) ASC;PostgreSQL:
SELECT Path FROM your_table ORDER BY Path::NUMERIC ASC;或者用
CAST:SELECT Path FROM your_table ORDER BY CAST(Path AS NUMERIC) ASC;SQL Server:
SELECT Path FROM your_table ORDER BY CAST(Path AS DECIMAL(10,2)) ASC;Oracle:
SELECT Path FROM your_table ORDER BY TO_NUMBER(Path) ASC;
执行上述SQL后,就能得到你需要的数值升序排序结果:
| Path |
|---|
| 2 |
| 3.6 |
| 11 |
| 14 |
| 14.5 |
| 23 |
内容的提问来源于stack exchange,提问作者test13
相关产品推荐
相关产品推荐

