Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak sformatować i posortować datę w Oracle?

Wygląda na to, że chcesz czegoś takiego

SELECT to_char( your_date_column, your_format_mask )
  FROM your_table
 ORDER BY your_date_column

W SELECT listy, chcesz zwrócić ciąg znaków reprezentujący datę w preferowanym formacie. W ORDER BY klauzuli, którą chcesz złożyć do rzeczywistego terminu. Korzystanie ze standardowego EMP i DEPT na przykład tabele

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.

Jeśli dodasz DISTINCT, problem polega na tym, że Oracle nie wie, że funkcja, którą stosujesz (w tym przypadku TO_CHAR) zapewnia mapowanie jeden-do-jednego z danych w tabeli na dane wyjściowe. Na przykład dwie różne daty (1 października 2010 10:15:15 i 1 października 2010 23:45:50) mogą wygenerować ten sam wynik znakowy, zmuszając Oracle do wyeliminowania jednego z dwóch ciągów „01-10-2010” ale te dwie daty byłyby inaczej sortowane. Możesz rozwiązać ten problem, zagnieżdżając zapytanie i konwertując ciąg z powrotem na datę po wykonaniu DISTINCT i przed wykonaniem 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. %ROWTYPE zmienna z nazwy tabeli

  2. Niespójna transpozycja

  3. Eksportuj dane do pliku JSON w Oracle 11g przy użyciu PL/SQL

  4. Pomoc w obliczaniu złożonej sumy w hierarchicznym zbiorze danych

  5. IOException:Karta sieciowa nie może nawiązać połączenia