Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да форматирате и сортирате дата в Oracle?

Изглежда, че искате нещо като

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Уникално ограничение на Oracle SQL A към B, B към A

  2. ORA-02253:спецификацията на ограничение не е разрешена тук

  3. Изпълнете функция на Oracle, която връща референтен курсор в C#

  4. Параметри на Oracle с IN изявление?

  5. Как да изпълните съхранена процедура на Oracle чрез връзка към база данни