100分字符数字混合时排序有关问题~
100分求一个字符数字混合时排序问题~~~~
2006.5.林铬移交
GC12133
GPRS01002
GPRS010021
HNUN(2006)移094号
HNUN(2006)移095号
HNUN(2006)移1024号
HNUN(2006)移1026号
HNUN(2006)移1032号
HNUN(2006)移1033号
HNUN(2006)移115号
HNUN(2006)移116号
HNUN(2007)网建099号
HNUN(2007)网建101号
HNUN(2007)网建102号
HNUN(2007)网建1033
HNUN(2007)网建103号
HNUN(2007)网建1049号
HNUN(2007)网建104号
HNUN(2007)网建1050号
HNUN(2007)网建1051号
HNUN(2007)网建1052号
HNUN(2007)网建105号
数据库中一字段有这些类型的数据,
有“2006.5.林铬移交”,“GC12133”,这种不规则编号
也有如HNUN(2007)网建102号这样有一定规则的编号,
oracle的默认排序就是上面这种,怎么样才能使HNUN(2007)网建1049号这种排到1000多号去而不是插在100多号的中间?
即
HNUN(2007)网建099号
HNUN(2007)网建101号
HNUN(2007)网建102号
HNUN(2007)网建103号
HNUN(2007)网建104号
HNUN(2007)网建105号
......
......
HNUN(2007)网建1033
HNUN(2007)网建1049号
HNUN(2007)网建1050号
HNUN(2007)网建1051号
HNUN(2007)网建1052号
------解决方案--------------------
------解决方案--------------------
2006.5.林铬移交
GC12133
GPRS01002
GPRS010021
HNUN(2006)移094号
HNUN(2006)移095号
HNUN(2006)移1024号
HNUN(2006)移1026号
HNUN(2006)移1032号
HNUN(2006)移1033号
HNUN(2006)移115号
HNUN(2006)移116号
HNUN(2007)网建099号
HNUN(2007)网建101号
HNUN(2007)网建102号
HNUN(2007)网建1033
HNUN(2007)网建103号
HNUN(2007)网建1049号
HNUN(2007)网建104号
HNUN(2007)网建1050号
HNUN(2007)网建1051号
HNUN(2007)网建1052号
HNUN(2007)网建105号
数据库中一字段有这些类型的数据,
有“2006.5.林铬移交”,“GC12133”,这种不规则编号
也有如HNUN(2007)网建102号这样有一定规则的编号,
oracle的默认排序就是上面这种,怎么样才能使HNUN(2007)网建1049号这种排到1000多号去而不是插在100多号的中间?
即
HNUN(2007)网建099号
HNUN(2007)网建101号
HNUN(2007)网建102号
HNUN(2007)网建103号
HNUN(2007)网建104号
HNUN(2007)网建105号
......
......
HNUN(2007)网建1033
HNUN(2007)网建1049号
HNUN(2007)网建1050号
HNUN(2007)网建1051号
HNUN(2007)网建1052号
------解决方案--------------------
- SQL code
给你个方法参考:
DROP TABLE tt;
CREATE TABLE tt (n VARCHAR2(50));
insert into tt values('2006.5.林铬移交 ');
insert into tt values('GC12133 ');
insert into tt values('GPRS01002 ');
insert into tt values('GPRS010021 ');
insert into tt values('HNUN(2006)移094号 ');
insert into tt values('HNUN(2006)移095号 ');
insert into tt values('HNUN(2006)移1024号 ');
insert into tt values('HNUN(2006)移1026号 ');
insert into tt values('HNUN(2006)移1032号 ');
insert into tt values('HNUN(2006)移1033号 ');
insert into tt values('HNUN(2006)移115号 ');
insert into tt values('HNUN(2006)移116号 ');
insert into tt values('HNUN(2007)网建099号 ');
insert into tt values('HNUN(2007)网建101号 ');
insert into tt values('HNUN(2007)网建102号 ');
insert into tt values('HNUN(2007)网建1033号 ');
insert into tt values('HNUN(2007)网建103号 ');
insert into tt values('HNUN(2007)网建1049号 ');
insert into tt values('HNUN(2007)网建104号 ');
insert into tt values('HNUN(2007)网建1050号 ');
insert into tt values('HNUN(2007)网建1051号 ');
insert into tt values('HNUN(2007)网建1052号 ');
insert into tt values('HNUN(2007)网建105号 ');
COMMIT;
SELECT n
FROM TT
ORDER BY REGEXP_REPLACE(n,'[0-9]+号',''),CASE
WHEN N LIKE 'HNUN(2006)移%' THEN
LPAD(LTRIM(N, 'HNUN(2006)移'), 10, '0')
WHEN n LIKE 'HNUN(2007)网建%' THEN
LPAD(LTRIM(N, 'HNUN(2007)网建'), 10, '0')
END;
输出:
2006.5.林铬移交
GC12133
GPRS01002
GPRS010021
HNUN(2006)移094号
HNUN(2006)移095号
HNUN(2006)移115号
HNUN(2006)移116号
HNUN(2006)移1024号
HNUN(2006)移1026号
HNUN(2006)移1032号
HNUN(2006)移1033号
HNUN(2007)网建099号
HNUN(2007)网建101号
HNUN(2007)网建102号
HNUN(2007)网建103号
HNUN(2007)网建104号
HNUN(2007)网建105号
HNUN(2007)网建1033号
HNUN(2007)网建1049号
HNUN(2007)网建1050号
HNUN(2007)网建1051号
HNUN(2007)网建1052号
------解决方案--------------------