varchar数字章节号排序

小脩 2014-02-26 03:22:32
在Oracle数据库字段的类型是varchar2
字段下保存的内容是数字章节类型:
1
1.1
1.1.1
2
2.1
我现在要根据这个排序,直接order by后:
1
1.1
1.10 --------这行排序不对1.1.1

我知道,如果另外再加一个排序字段可以就行了, 但是我现在的情况下是不能再加字段了,只能用这个varchar2类型排序。
大神们,有好的解决办法么?
...全文
235 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 11 楼 sifadmwy 的回复:
http://www.itpub.net/515354,1.html 这是一种不错的解决方法 用分隔符。。。我是用DB2的 写出来ORACLE也不能用
三克油。提供思路
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 10 楼 hidanger521 的回复:
建议楼主,以后对于有规则的字符串操作,多使用正则表达式。。事半功倍
非常感谢!
sifadmwy 2014-02-26
  • 打赏
  • 举报
回复
http://www.itpub.net/515354,1.html 这是一种不错的解决方法 用分隔符。。。我是用DB2的 写出来ORACLE也不能用
流浪川 2014-02-26
  • 打赏
  • 举报
回复
建议楼主,以后对于有规则的字符串操作,多使用正则表达式。。事半功倍
流浪川 2014-02-26
  • 打赏
  • 举报
回复
引用 楼主 lxk1201 的回复:
在Oracle数据库字段的类型是varchar2 字段下保存的内容是数字章节类型: 1 1.1 1.1.1 2 2.1 我现在要根据这个排序,直接order by后: 1 1.1 1.10 --------这行排序不对1.1.1 我知道,如果另外再加一个排序字段可以就行了, 但是我现在的情况下是不能再加字段了,只能用这个varchar2类型排序。 大神们,有好的解决办法么?

 ORDER BY to_number(REGEXP_SUBSTR(TTT, '[[:alnum:]]+', 1, 1)) NULLS FIRST,
          to_number(REGEXP_SUBSTR(TTT, '[[:alnum:]]+', 1, 2)) NULLS FIRST,
          to_number(REGEXP_SUBSTR(TTT, '[[:alnum:]]+', 1, 3)) NULLS FIRST
可以根据标题个数,增加排序。。如果不确定,就写到10,应该足够了吧。。
流浪川 2014-02-26
  • 打赏
  • 举报
回复
ORDER BY to_number(REGEXP_SUBSTR(字段, '[[:alnum:]]+', 1, 1)) NULLS FIRST, to_number(REGEXP_SUBSTR(字段, '[[:alnum:]]+', 1, 2)) NULLS FIRST, to_number(REGEXP_SUBSTR(字段, '[[:alnum:]]+', 1, 3)) NULLS FIRST
sifadmwy 2014-02-26
  • 打赏
  • 举报
回复
还有种思路不知道对不对 用递归来做。。只是提供个思路。。with test (parentnode ,child node)
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 5 楼 sifadmwy 的回复:
[quote=引用 4 楼 lxk1201 的回复:] [quote=引用 3 楼 sifadmwy 的回复:] 额我有个建议 用游标,把章节字段通过.进行分解成三段 在order by 不知道可行不
关键是我不知道用游标。[/quote] 我也觉得有点问题 等下班了试试看去 。。。[/quote] 不要等下班啊。
sifadmwy 2014-02-26
  • 打赏
  • 举报
回复
引用 4 楼 lxk1201 的回复:
[quote=引用 3 楼 sifadmwy 的回复:] 额我有个建议 用游标,把章节字段通过.进行分解成三段 在order by 不知道可行不
关键是我不知道用游标。[/quote] 我也觉得有点问题 等下班了试试看去 。。。
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 3 楼 sifadmwy 的回复:
额我有个建议 用游标,把章节字段通过.进行分解成三段 在order by 不知道可行不
关键是我不知道用游标。
sifadmwy 2014-02-26
  • 打赏
  • 举报
回复
额我有个建议 用游标,把章节字段通过.进行分解成三段 在order by 不知道可行不
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 lxk1201 的回复:] 在Oracle数据库字段的类型是varchar2 字段下保存的内容是数字章节类型: 1 1.1 1.1.1 2 2.1 我现在要根据这个排序,直接order by后: 1 1.1 1.10 --------这行排序不对1.1.1 我知道,如果另外再加一个排序字段可以就行了, 但是我现在的情况下是不能再加字段了,只能用这个varchar2类型排序。 大神们,有好的解决办法么?
不太明白LZ的意思? 1.10 --------这行排序不对1.1.1 1.10这行数据怎么来的?[/quote] 有很多章节啊。 1.1 1.2 1.3 1.4 ....... 1.10 1.11 排序之后1.10就跑到1.2前面去了。
CT_LXL 2014-02-26
  • 打赏
  • 举报
回复
引用 楼主 lxk1201 的回复:
在Oracle数据库字段的类型是varchar2 字段下保存的内容是数字章节类型: 1 1.1 1.1.1 2 2.1 我现在要根据这个排序,直接order by后: 1 1.1 1.10 --------这行排序不对1.1.1 我知道,如果另外再加一个排序字段可以就行了, 但是我现在的情况下是不能再加字段了,只能用这个varchar2类型排序。 大神们,有好的解决办法么?
不太明白LZ的意思? 1.10 --------这行排序不对1.1.1 1.10这行数据怎么来的?

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧