Parece que quieres algo como
SELECT to_char( your_date_column, your_format_mask )
FROM your_table
ORDER BY your_date_column
En el SELECT
lista, desea devolver una cadena de caracteres que represente la fecha en su formato preferido. En el ORDER BY
cláusula, desea ordenar por la fecha real. Usando el estándar EMP
y DEPT
tablas, por ejemplo
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.
Si agrega DISTINCT, el problema es que Oracle no sabe que la función que está aplicando (en este caso, TO_CHAR) proporciona una asignación uno a uno de los datos de la tabla a los datos de la salida. Por ejemplo, dos fechas diferentes (1 de octubre de 2010 10:15:15 y 1 de octubre de 2010 23:45:50) pueden generar la misma salida de caracteres, lo que obliga a Oracle a eliminar una de las dos cadenas '01-10-2010' pero las dos fechas se ordenarían de manera diferente. Puede corregir ese problema anidando su consulta y convirtiendo la cadena nuevamente a una fecha después de hacer DISTINCT
y antes de hacer el 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.