0°

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

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

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函数。

数据库
0 条回复 A 作者 M 管理员
    当上帝赐给你荒野时,就意味着,他要你成为高飞的鹰
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论