Звучит так, как будто вы хотите что-то вроде
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), обеспечивает взаимно-однозначное сопоставление данных в таблице с данными в выходных данных. , Например, две разные даты (1 октября 2010 г. 10:15:15 и 1 октября 2010 г. 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.