Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да поръчате по дата в PostgreSQL или Oracle

Проблем:

Искате да сортирате редовете по дата.

Пример 1:

exam таблицата има две колони, subject и exam_date .

предмет дата_изпит
Математика 19.12.2019
английски 08.01.2020
Наука 2020-01-05
Здраве 2020-01-05
Изкуство NULL

Искате да сортирате редовете по exam_date .

Решение:

SELECT *
FROM exam
ORDER BY exam_date;

Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_date ):

предмет дата_изпит
Математика 19.12.2019
Наука 2020-01-05
Здраве 2020-01-05
английски 08.01.2020
Изкуство NULL

Дискусия:

Използвайте ORDER BY ключова дума и името на колоната, по която искате да сортирате. По този начин ще сортирате данните във възходящ ред по тази колона. Можете също да използвате ASC ключова дума, за да стане ясно, че поръчката е възходяща (най-ранната дата се показва първа, най-новата дата се показва последна и т.н.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Ако искате да видите най-новата дата първа и най-ранната дата последна, трябва да сортирате в низходящ ред. Използвайте DESC ключова дума в този случай.

SELECT *
FROM exam
ORDER BY exam_date DESC;

Имайте предвид, че в PostgreSQL и в Oracle NULL s се показват последни при сортиране във възходящ ред и първи при сортиране в низходящ ред. Също така, редовете със същия exam_date се показват в произволен ред (може да видите Science второ и Health трето, или здраве второ и Science трето).

Пример 2:

exam таблицата има следните колони:subject , exam_year , exam_month и exam_day . Месеците са дадени в имена, а не в числа.

предмет изпитна_година изпит_месец изпитен_ден
Математика 2019 Декември 19
английски 2020 Януари 8
Наука 2020 Януари 5
Здраве 2020 Януари 5
Изкуство NULL NULL NULL

Искате да сортирате редовете по дата на изпита.

Решение:

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

Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_year , exam_month и exam_date ):

предмет изпитна_година изпит_месец изпитен_ден
Математика 2019 Декември 19
Здраве 2020 Януари 5
Наука 2020 Януари 5
английски 2020 Януари 8
Изкуство NULL NULL NULL

Дискусия:

Трябва да подредите редовете по три стойности:година, месец и ден, но за да имате правилния ред, трябва да преобразувате месеца в число ('January ' до 1 , 'February ' до 2 и др.). В противен случай ще видите „December ' преди 'January '. Функцията TO_DATE(exam_month, 'Month') преобразува пълното име на месеца в дата в '0001-MM-01 ' формат. Например получавате „0001-12-01 ' за декември.

Вече можете да използвате функцията EXTRACT(MONTH FROM date), за да извлечете месеца от тази стойност на датата. Месецът ще бъде върнат като число.

Комбинирайки тези две функции, можете да получите месеца като число, като използвате следната формула:

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

За да сортирате редовете по дата, трябва да сортирате по година, месец и ден (в този ред). Ако искате първо да видите последния изпит, ще трябва да сортирате в низходящ ред. За да направите това, трябва да използвате DESC ключова дума след всяка колона в ORDER BY клауза.

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция LISTAGG:резултатът от конкатенацията на низове е твърде дълъг

  2. Възможно ли е да се генерират django модели от базата данни?

  3. Издаден SQL Developer 4.0

  4. Пример за групово събиране на Oracle с помощта на обект тип тип ред на курсора

  5. Как да извлека само стойност на датата от полето за дата в Oracle?