sql - 按升序对 varchar 列进行数字排序
问题描述
我正在尝试按升序排列 ORACLE SQL TABLE 的列(类型 varchar,name=PRODUCTVERSION)中的数据。我努力了:
SELECT * FROM KCProductVersion where productid =1 ORDER BY PRODUCTVERSION asc
解决方案
您可以将版本号拆分为单独的数字并按以下顺序排序:
order by
to_number(regexp_substr(productversion, '\d+', 1, 1)),
to_number(regexp_substr(productversion, '\d+', 1, 2)),
to_number(regexp_substr(productversion, '\d+', 1, 3))
如果您的版本号可以包含 3 个以上的部分,则可以使用更多表达式扩展该order by
子句。to_number()
with t as (
select '1.0' productversion from dual
union all select '1.10' from dual
union all select '10.5.2' from dual
union all select '16' from dual
union all select '2.0.0' from dual
)
select *
from t
order by
to_number(regexp_substr(productversion, '\d+', 1, 1)),
to_number(regexp_substr(productversion, '\d+', 1, 2)),
to_number(regexp_substr(productversion, '\d+', 1, 3))
| 产品版本 | | :------------- | | 1.0 | | 1.10 | | 2.0.0 | | 10.5.2 | | 16 |
推荐阅读
- python - False不应被视为0
- python - 如何在 discord.py 中排除角色
- c++ - 如何在 C++ 中从用户那里获取具有预定义字符串长度的字符串输入?
- reactjs - Reactjs 在刷新时保持 Material Ui 选项卡处于选中状态
- cloud-foundry - 在 Cloud Foundry 上运行的应用程序的监控环境
- python - 在 Python 中使用正则表达式删除某个标点符号周围的数字
- vim - vim 启动时忽略 vimrc 中的所有错误
- powershell - 序列化对象如何在 powershell 中工作
- express - Express - next() 没有在控制器中调用
- postgresql - 从 PostgreSQL 转储中恢复列