今天看了一个复杂的语句,终于理解了,原来select语句中后面所有的列名可以用 返回结果的函数(好像都返回一个结果)来代替。 因为列名所代表的就是一个记录的属性,属性相当于变量(面向对象中即是如此)函数返回的一个结果是不确定的,所以它整体可以看做是一个变量。那么
select ename, substr(to_char(hiredate,'yyyy-mm-dd'),0,4),substr(to_char(hiredate,'mm-dd-yy'),0,2)
from emp order by
to_number(substr(to_char(hiredate,'mm-dd-yy'),0,2)),to_number(substr(to_char(hiredate,'yyyy-mm-dd'),0,4))
就是合理的。
该题目原题如下:
显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则
将最早年份的员工排在最前面.