对字母数字混合的数据排序

现有字母和数字混合的数据,希望按照数字或字母部分来排序。

Oracle和PostgreSQL

使用函数REPLACE和TRANSLATE修改要排序的字符串:

/* ORDER BY DEPTNO */
select data
	from V
 order by replace(data,
		  replace(
		translate(data,'0123456789','##########'),'#',''),'')
/* ORDER BY ENAME */
select data
	from emp
 order by replace(
		  translate(data,'0123456789','##########'),'#','')

DB2

在DB2中,隐式类型转换比在Oracle或PostgreSQL中更为严格。所以,为了使视图V有效,需要将DEPTNO转换为CHAR类型。

/* ORDER BY DEPTNO */
select *
	from (
select ename||' '||cast(deptno as char(2)) as data
	from emp
		) v
 order by replace(data,
		  replace(
		translate(data,'##########','0123456789'),'#',''),'')
/* ORDER BY ENAME */
select *
	from (
select ename||' '||cast(deptno as char(2)) as data
	from emp
		) v
 order by replace(
		  translate(data,'##########','0123456789'),'#','')

注:MySQL和SQL Server平台当前不支持TRANSLATE函数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注