sql >> Database >  >> RDS >> Oracle

Hoe een datum opmaken en sorteren in Oracle?

Het klinkt alsof je iets wilt als

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

In de SELECT lijst, wilt u een tekenreeks retourneren die de datum in uw voorkeursindeling vertegenwoordigt. In de ORDER BY clausule, u wilt bestellen op de werkelijke datum. Gebruik van de standaard EMP en DEPT tabellen, bijvoorbeeld

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.

Als u een DISTINCT toevoegt, is het probleem dat Oracle niet weet dat de functie die u toepast (in dit geval TO_CHAR) een één-op-één-toewijzing biedt van de gegevens in de tabel naar de gegevens in de uitvoer. Twee verschillende datums (1 oktober 2010 10:15:15 en 1 oktober 2010 23:45:50) kunnen bijvoorbeeld dezelfde tekenuitvoer genereren, waardoor Oracle een van de twee '01-10-2010'-strings moet elimineren maar de twee datums zouden anders sorteren. U kunt dat probleem verhelpen door uw zoekopdracht te nesten en de tekenreeks terug te converteren naar een datum nadat u de DISTINCT hebt uitgevoerd en voordat u de ORDER BY . doet

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. Java-gids converteren naar Oracle Raw (16) String

  2. Is er een manier om het rijnummer in Mysql te krijgen, zoals het rijnummer in orakel?

  3. Fix "ERROR 3942 (HY000):elke rij van een VALUES-clausule moet ten minste één kolom hebben" bij gebruik van de VALUES-instructie in MySQL

  4. Recursieve query in SQL Server