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

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

Проблем:

Искате да сортирате редовете по номер на месец, като са дадени имена на месеци (искате януари да се показва първи, декември последен).

Пример:

birthday таблицата съдържа две колони:име и birthday_month . Месеците са дадени в имена, а не в числа.

name рожден_месец
Ронан Тиша NULL
Декември Януари
Анджи Джулия Април
Нарел Дилън Април
Пърди Кейси Януари
Дона Нел NULL
Блейз Грейм октомври

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

Решение:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));

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

name рожден_месец
Пърди Кейси Януари
Анджи Джулия Април
Нарел Дилън Април
Блейз Грейм октомври
Ронан Тиша Януари
Декември NULL
Дона Нел NULL

Дискусия:

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

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

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

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

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

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C#:Предайте дефиниран от потребителя тип към съхранена процедура на Oracle

  2. Функция NANVL() в Oracle

  3. Топ 9 полезни заявки за принтери за приложения на Oracle

  4. Oracle Преобразува секунди в часове:минути:секунди

  5. Инсталиране на примерни схеми за Oracle 12c с помощта на помощника за конфигуриране на база данни