Có vẻ như bạn muốn một cái gì đó giống như
SELECT to_char( your_date_column, your_format_mask )
FROM your_table
ORDER BY your_date_column
Trong SELECT
, bạn muốn trả về một chuỗi ký tự đại diện cho ngày ở định dạng ưa thích của bạn. Trong ORDER BY
, bạn muốn đặt hàng trước ngày thực tế. Sử dụng EMP
tiêu chuẩn và DEPT
bảng, chẳng hạn
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.
Nếu bạn thêm một DISTINCT, vấn đề là Oracle không biết rằng hàm bạn đang áp dụng (trong trường hợp này là TO_CHAR) cung cấp ánh xạ 1-1 từ dữ liệu trong bảng đến dữ liệu trong đầu ra. Ví dụ:hai ngày khác nhau (ngày 1 tháng 10 năm 2010 10:15:15 và ngày 1 tháng 10 năm 2010 23:45:50) có thể tạo ra cùng một đầu ra ký tự, buộc Oracle phải loại bỏ một trong hai chuỗi '01-10-2010' nhưng hai ngày sẽ sắp xếp khác nhau. Bạn có thể khắc phục sự cố đó bằng cách lồng truy vấn của mình và chuyển đổi chuỗi trở lại một ngày sau khi thực hiện DISTINCT
và trước khi thực hiện 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.