SQL 依据子串排序,你想按照一个字符串的特定部分排列查询结果。例如,你希望从 EMP
表检索员工的名字和职位,并且按照职位字段的最后两个字符对检索结果进行排序。结果集应该像下面这样。
SQL 依据子串排序 问题
你想按照一个字符串的特定部分排列查询结果。例如,你希望从 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
SQL 依据子串排序 解决方案
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)
SQL 依据子串排序 扩展知识
利用数据库中的子串函数,你可以很方便地按照一个字符串的任意部分来排序。要想按照一个字符串的最后两个字符排序,需要先找到该字符串的结尾处(即字符串的长度),然后减去 2。这样,起始位置就是该字符串的倒数第 2 个字符。然后,你就可以截取从指定起始位置开始直到字符串结束的所有字符。SQL Server
的 SUBSTRING
函数略有不同,它要求提供第 3 个参数来指定需要截取几个字符。对于本实例而言,第 3 个参数既可以是 2,也可以是任何大于 2 的数字。