varchar数字章节号排序

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

我知道,如果另外再加一个排序字段可以就行了, 但是我现在的情况下是不能再加字段了,只能用这个varchar2类型排序。
大神们,有好的解决办法么?
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 2 楼 lwb314 的回复:
好像理解错了, 试试这么写 declare @t1 table(fid varchar(30)) insert into @t1 select '1.1' union select '1.2' union select '1.3' union select '1.4' union select '1.10' union select '1.11' union select '1.12' union select '2.2' union select '3.3' union select '4.4' union select '3.10' union select '13.11' union select '14.12' select * from @t1 order by cast(SUBSTRING(fid,1,CHARINDEX('.',fid,1)-1) as money), cast(SUBSTRING(fid,CHARINDEX('.',fid,1)+1,LEN(fid)) as money)
查询貌似查不出结果。
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 6 楼 defonds 的回复:
[quote=引用 5 楼 lxk1201 的回复:] [quote=引用 4 楼 defonds 的回复:] 你是 select * 哦。 那么多字段都放在一个 money 字段里,怎么可以呢。
那要怎么改?[/quote]money 只能容纳一个。 你可以这样:
select ab as money, cd as moneyone,,,,,
[/quote] 你能帮我把 select * from @t1 order by cast(SUBSTRING(fid,1,CHARINDEX('.',fid,1)-1) as money), cast(SUBSTRING(fid,CHARINDEX('.',fid,1)+1,LEN(fid)) as money) 整个改正确么? order by 后面的都看不懂。
Defonds 2014-02-26
  • 打赏
  • 举报
回复
引用 5 楼 lxk1201 的回复:
[quote=引用 4 楼 defonds 的回复:] 你是 select * 哦。 那么多字段都放在一个 money 字段里,怎么可以呢。
那要怎么改?[/quote]money 只能容纳一个。 你可以这样:
select ab as money, cd as moneyone,,,,,
小脩 2014-02-26
  • 打赏
  • 举报
回复
引用 4 楼 defonds 的回复:
你是 select * 哦。 那么多字段都放在一个 money 字段里,怎么可以呢。
那要怎么改?
Defonds 2014-02-26
  • 打赏
  • 举报
回复
你是 select * 哦。 那么多字段都放在一个 money 字段里,怎么可以呢。
小脩 2014-02-26
  • 打赏
  • 举报
回复
select * from @t1 order by cast(SUBSTRING(fid,1,CHARINDEX('.',fid,1)-1) as money), cast(SUBSTRING(fid,CHARINDEX('.',fid,1)+1,LEN(fid)) as money) 红色部分在PL/SQL下执行报“无效数据类型”
  • 打赏
  • 举报
回复
好像理解错了, 试试这么写 declare @t1 table(fid varchar(30)) insert into @t1 select '1.1' union select '1.2' union select '1.3' union select '1.4' union select '1.10' union select '1.11' union select '1.12' union select '2.2' union select '3.3' union select '4.4' union select '3.10' union select '13.11' union select '14.12' select * from @t1 order by cast(SUBSTRING(fid,1,CHARINDEX('.',fid,1)-1) as money), cast(SUBSTRING(fid,CHARINDEX('.',fid,1)+1,LEN(fid)) as money)
  • 打赏
  • 举报
回复
where 字段 not like '%0' 怎么样?把最后一位是0的都去掉?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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