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

Sådan bestiller du efter dato i PostgreSQL eller Oracle

Problem:

Du vil sortere rækkerne efter dato.

Eksempel 1:

exam tabellen har to kolonner, subject og exam_date .

emne eksamen_dato
Matematik 2019-12-19
Engelsk 2020-01-08
Videnskab 2020-01-05
Sundhed 2020-01-05
Kunst NULL

Du vil sortere rækkerne efter exam_date .

Løsning:

SELECT *
FROM exam
ORDER BY exam_date;

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_date ):

emne eksamen_dato
Matematik 2019-12-19
Videnskab 2020-01-05
Sundhed 2020-01-05
Engelsk 2020-01-08
Kunst NULL

Diskussion:

Brug ORDER BY nøgleord og navnet på den kolonne, som du vil sortere efter. På denne måde vil du sortere dataene i stigende rækkefølge efter denne kolonne. Du kan også bruge ASC nøgleord for at gøre det klart, at rækkefølgen er stigende (den tidligste dato vises først, den seneste dato vises sidst osv.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Hvis du gerne vil se den seneste dato først og den tidligste dato sidst, skal du sortere i faldende rækkefølge. Brug DESC søgeord i dette tilfælde.

SELECT *
FROM exam
ORDER BY exam_date DESC;

Bemærk, at NULL i PostgreSQL og Oracle s vises sidst ved sortering i stigende rækkefølge og først ved sortering i faldende rækkefølge. Også rækkerne med den samme exam_date vises i tilfældig rækkefølge (du kan muligvis se Science sekund og Health tredje, eller Sundhed andet og Science tredje).

Eksempel 2:

exam tabellen har følgende kolonner:subject , exam_year , exam_month og exam_day . Månederne er angivet i navne, ikke i tal.

emne eksamen_år eksamen_måned eksamensdag
Matematik 2019 December 19
Engelsk 2020 Januar 8
Videnskab 2020 Januar 5
Sundhed 2020 Januar 5
Kunst NULL NULL NULL

Du vil sortere rækkerne efter eksamensdatoen.

Løsning:

SELECT *
FROM exam
ORDER BY
  exam_year,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
  exam_day;

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_year , exam_month og exam_date ):

emne eksamen_år eksamen_måned eksamensdag
Matematik 2019 December 19
Sundhed 2020 Januar 5
Videnskab 2020 Januar 5
Engelsk 2020 Januar 8
Kunst NULL NULL NULL

Diskussion:

Du skal sortere rækkerne efter tre værdier:året, måneden og dagen, men for at have den korrekte rækkefølge skal du konvertere måneden til et tal ('January ' til 1 , 'February ' til 2 , etc.). Ellers vil du se 'December ' før 'January '. Funktionen TO_DATE(eksamen_måned, 'Måned') konverterer det fulde månedsnavn til en dato i '0001-MM-01 ' format. For eksempel får du '0001-12-01 ' for december.

Du kan nu bruge EXTRACT(MONTH FROM date)-funktionen til at udtrække måneden fra denne datoværdi. Måneden returneres som et tal.

Ved at kombinere disse to funktioner kan du få måneden som et tal ved hjælp af følgende formel:

EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))

For at sortere rækkerne efter dato skal du sortere efter år, måned og dag (i denne rækkefølge). Hvis du gerne vil se den seneste eksamen først, skal du sortere i faldende rækkefølge. For at gøre dette skal du bruge en DESC søgeord efter hver kolonne i ORDER BY klausul.

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
  exam_day DESC;

  1. Returner en liste over tabeller og visninger i SQL Server ved hjælp af T-SQL (sp_tables)

  2. Forvirret over UPDLOCK, HOLDLOCK

  3. Begrænsning af samtidige brugersessioner for et specifikt login i SQL Server

  4. Hvordan EDB blev førende på Postgres-markedet