sql >> Database teknologi >  >> RDS >> Oracle

Hvordan formaterer og sorterer man en dato i Oracle?

Det lyder som om du vil have noget lignende

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

I SELECT liste, vil du returnere en tegnstreng, der repræsenterer datoen i dit foretrukne format. I ORDER BY klausul, vil du bestille inden den faktiske dato. Bruger standarden EMP og DEPT tabeller, for eksempel

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.

Hvis du tilføjer en DISTINCT, er problemet, at Oracle ikke ved, at den funktion, du anvender (i dette tilfælde TO_CHAR), giver en en-til-en mapping fra dataene i tabellen til dataene i outputtet. For eksempel kan to forskellige datoer (1. oktober 2010 10:15:15 og 1. oktober 2010 23:45:50) generere det samme tegnoutput, hvilket tvinger Oracle til at fjerne en af ​​de to '01-10-2010'-strenge men de to datoer ville sortere forskelligt. Du kan rette op på dette problem ved at indlejre din forespørgsel og konvertere strengen tilbage til en dato efter at have udført DISTINCT og før du udfører 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. Mysql-forespørgsel for at slette poster efter valg..?

  2. oracle PLSQL interviewspørgsmål

  3. SQL/Postgres datetime division / normalisering

  4. MySQL-forespørgsel med alias, der ikke bruger et indeks