Sepertinya Anda menginginkan sesuatu seperti
SELECT to_char( your_date_column, your_format_mask )
FROM your_table
ORDER BY your_date_column
Dalam SELECT
list, Anda ingin mengembalikan string karakter yang mewakili tanggal dalam format pilihan Anda. Dalam ORDER BY
klausa, Anda ingin memesan pada tanggal yang sebenarnya. Menggunakan EMP
standar dan DEPT
tabel, misalnya
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.
Jika Anda menambahkan DISTINCT, masalahnya adalah Oracle tidak tahu bahwa fungsi yang Anda terapkan (dalam hal ini TO_CHAR) menyediakan pemetaan satu-ke-satu dari data di tabel ke data di output. Misalnya, dua tanggal yang berbeda (1 Oktober 2010 10:15:15 dan 1 Oktober 2010 23:45:50) mungkin menghasilkan output karakter yang sama, memaksa Oracle untuk menghilangkan salah satu dari dua string '01-10-2010' tetapi kedua tanggal tersebut akan diurutkan secara berbeda. Anda dapat memperbaiki masalah itu dengan membuat kueri dan mengonversi string kembali ke tanggal setelah melakukan DISTINCT
dan sebelum melakukan 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.