Oracle字符串字段内的字符排序
来源:互联网 发布:excel合并软件 绿色版 编辑:程序博客网 时间:2024/06/06 16:38
这个是狙狙的sql解法。
http://blog.csdn.net/happyflystone/archive/2009/01/17/3819863.aspx
引用需求
今天和梁翁在群里聊天,小家伙突然抛出一个有意思的问题,那就是字符串字段内的字符串排序问题,比如有列 col, 有数据 'RDGS' , 要求输出为 'DGRS' 。
--------------------------------------------------------------------------------
oracle分析函数支持聚合:)
create table t_test(f varchar2 ( 10 ));
insert into t_test values ( 'sdffesa' );
insert into t_test values ( 'asdflkj' );
insert into t_test values ( 'ijf92' );
select f, max ( replace (SYS_CONNECT_BY_PATH(c, ' ' ), ' ' , '' ))f1 from (
select f,rn,c,row_number()over( partition by f order by c) as ord from ( select
f,decode(rn,
1 ,substr(f, 1 , 1 ),
2 ,substr(f, 2 , 1 ),
3 ,substr(f, 3 , 1 ),
4 ,substr(f, 4 , 1 ),
5 ,substr(f, 5 , 1 ),
6 ,substr(f, 6 , 1 ),
7 ,substr(f, 7 , 1 ),
8 ,substr(f, 8 , 1 ),
9 ,substr(f, 9 , 1 ),
10 ,substr(f, 10 , 1 )
) as c,rn from
t_test a ,(
select level rn from dual connect by 1 = 1 and level <= 10 )b
where length(a.f)>=b.rn))
start with ord= 1 connect by f= prior f and ord- 1 = prior ord
group by f;
drop table t_test;
/*
F F1
ijf92 29fij
asdflkj adfjkls
sdffesa adeffss
*/
--------------------------------------------------------------------------------
后来受到小梁的启发,修改了一下拆分字符串的方法,可以把decode去掉
-- 测试环境
create table t_test(f varchar2 ( 10 ));
insert into t_test values ( 'sdffesa' );
insert into t_test values ( 'asdflkj' );
insert into t_test values ( 'ijf92' );
-- 测试字符串的拆分
select
f,substr(f,rn, 1 ) as c from
t_test a ,(
select level rn from dual connect by 1 = 1 and level <= 10 )b
where length(a.f)>=b.rn order by f;
/*
F C
asdflkj a
asdflkj f
asdflkj j
asdflkj d
asdflkj l
asdflkj k
asdflkj s
ijf92 f
ijf92 2
ijf92 i
ijf92 9
ijf92 j
sdffesa a
sdffesa s
sdffesa e
sdffesa f
sdffesa d
sdffesa s
sdffesa f
*/
-- 测试拆分-聚合的完整语句
select f, max ( replace (SYS_CONNECT_BY_PATH(c, ' ' ), ' ' , '' ))f1 from (
select f,c,row_number()over( partition by f order by c) as ord from ( select
f,substr(f,rn, 1 ) as c from
t_test a ,(
select level rn from dual connect by 1 = 1 and level <= 10 )b
where length(a.f)>=b.rn))
start with ord= 1 connect by f= prior f and ord- 1 = prior ord
group by f;
drop table t_test;
/*
F F1
ijf92 29fij
asdflkj adfjkls
sdffesa adeffss
*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2009/01/20/3844336.aspx
- Oracle字符串字段内的字符排序
- Oracle字符串字段内的字符排序
- SQL字符串字段内的字符排序
- SQL2005下字符串字段内的字符排序
- 再议SQL2005下字符串字段内的字符排序
- 换个思路"SQL2005下字符串字段内的字符排序"
- Oracle 分组内排序 字段相同的排在一起显示
- 关于oracle 数据库中字符字段的排序问题
- SQL批量更改用户表内字符型字段的排序规则
- SQL批量更改用户表内字符型字段的排序规则
- SQL批量更改用户表内字符型字段的排序规则
- 如何实现oracle字段中字符+数字的数据------兼顾字符和数字组合排序
- oracle 根据某个字段分组,再根据另一个字段排序的sql查询 即 组内排序
- oracle中混合数字与字符的字符串排序
- Oracle内的转义字符
- oracle 字符串函数-删除指定匹配字符内字符
- 内排序- 字符串处理 字符与数字之间的对应关系
- oracle中字符型字段按数字排序
- delete和delete[]的区别
- Logwatch Linux/Unix系统日志检测软件
- 1.4检测题
- C++ 运算符优先级列表
- ORACLE PARTITION简介
- Oracle字符串字段内的字符排序
- 解决Firefox 下F5和IE下F5 不一致的javascript 脚本.
- 访问SQL Server的时候,无法登陆 的解决办法
- Ajax局部刷新
- The import javax.servlet cannot be resolved
- k=a++ 和k=++的区别
- 挺好的 生活
- mysql 命令
- 用c#连接SQL实现登陆界面功能