SQL Cookbook:二、查询结果排序(3)按子串排序
问题
按子串的某一部分对查询结果排序。例如,要从EMP表中返回员工名字和职位,并且按照职位字段的最后两个字符排序,结果集应如下所示:
ENAME
JOB
---------- --------- KING PRESIDENT SMITH CLERK ADAMS CLERK JAMES CLERK MILLER CLERK JONES MANAGER CLARK MANAGER BLAKE MANAGER ALLEN SALESMAN MARTIN SALESMAN WARD SALESMAN TURNER SALESMAN SCOTT ANALYST FORD ANALYST
解决方案
DB2、MySQL、Oracle和PostgreSQL
在ORDER BY子句中使用SUBSTR函数:
select ename,job from emp order by substr(job,length(job)-2)
SQL Server
在ORDER BY子句中使用和SUBSTRING函数:
select ename,job from emp order by substring(job,len(job)-2,2)
讨论
使用DBMS的子串函数,可以很容易地按字符串的一部分来排序。要按照字符串的最后两个字符来排序,首先要找到字符串的末尾,并减2。起始位置就是字符串中的倒数第2个字符。然后,获取从起始位置开始的所有字符。SQL在SUBSTRING中需要第3个参数来指定要获取的字符数。在本例中,只要这个数目大于或等于2就可以了。