sql >> Databasteknik >  >> RDS >> Oracle

Hur formaterar och sorterar man ett datum i Oracle?

Det låter som att du vill ha något liknande

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

I SELECT listan vill du returnera en teckensträng som representerar datumet i ditt föredragna format. I ORDER BY klausul vill du beställa före det faktiska datumet. Använder standarden EMP och DEPT tabeller, till exempel

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.

Om du lägger till en DISTINCT är problemet att Oracle inte vet att funktionen du använder (i det här fallet TO_CHAR) ger en en-till-en-mappning från data i tabellen till data i utdata. Till exempel kan två olika datum (1 oktober 2010 10:15:15 och 1 oktober 2010 23:45:50) generera samma teckenutdata, vilket tvingar Oracle att eliminera en av de två "01-10-2010"-strängarna men de två datumen skulle sortera olika. Du kan åtgärda det problemet genom att kapsla din fråga och konvertera tillbaka strängen till ett datum efter att ha gjort DISTINCT och innan du gör 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. Parallellerande samtal i PL/SQL

  2. 5 enkla steg för att komma igång med MariaDB och Tableau

  3. PHP strtotime() fungerar fel med 1 timme?

  4. PostgreSQL IF uttalande