听起来你想要的是类似于
SELECT to_char( your_date_column, your_format_mask )
FROM your_table
ORDER BY your_date_column
在 SELECT
列表中,你想返回一个代表日期的字符字符串,格式为你所偏爱的形式。在 ORDER BY
子句中,你需要按照实际日期进行排序。例如,使用标准的 EMP
和 DEPT
表
SQL> ed
Wrote file afiedt.buf
1 select to_char( hiredate, 'DD-MM-YYYY' )
2 from emp,
3 dept
4 where emp.deptno = dept.deptno
5* order by hiredate
SQL> /
TO_CHAR(HI
----------
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987
14 rows selected.
如果你添加了DISTINCT,问题在于Oracle不知道你应用的函数(在这种情况下是TO_CHAR)是否提供了从表中数据到输出数据的一对一映射。例如,两个不同的日期(2010年10月1日10:15:15和2010年10月1日23:45:50)可能会生成相同的字符输出,强制Oracle消除其中一个“01-10-2010”字符串,但是这两个日期会按不同的顺序排序。你可以通过嵌套查询并在执行DISTINCT之后将字符串转换回日期,然后再执行ORDER BY来解决这个问题。
SQL> ed
Wrote file afiedt.buf
1 select hire_date_str
2 from (
3 select distinct to_char( hiredate, 'DD-MM-YYYY' ) hire_date_str
4 from emp,
5 dept
6 where emp.deptno = dept.deptno
7 )
8* order by to_date(hire_date_str,'DD-MM-YYYY')
SQL> /
HIRE_DATE_
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987
13 rows selected.