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

Как да поръчам по име на месец в MySQL

Проблем:

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

Пример:

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

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

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

Решение:

SELECT *
FROM birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');

Резултатът изглежда така:

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

Дискусия:

За да поръчате по месеци, създайте дата с този месец. За да направите това, използвайте функцията STR_TO_DATE(). Ако имате дата, съхранена като низ в 'Year Month Day ' формат, можете да го прехвърлите към дата, като използвате STR_TO_DATE(date_string, '%Y %M %d') .

Първо, трябва да създадете низ с помощта на функцията CONCAT(). Годината може да бъде всяка година, която искате (напр. 0001 ) и денят може да бъде всеки ден, който искате (напр. 01 ):

CONCAT('0001 ', birthday_month, ' 01')

CONCAT() функцията комбинира всички аргументи в един низ. Низът трябва да бъде в „Year Month Day ' формат, така че вторият аргумент трябва да бъде birthday_month; просто първият и третият аргумент трябва да са в правилните формати.

След това трябва да преобразувате този низ в дата, като използвате STR_TO_DATE(date_string, '%Y %M %d') функция. Вторият аргумент на тази функция е форматът на датата. %Y означава година, %M означава месец (пълното му име, а не число) и %d означава ден.

STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d')

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

SELECT *
FROM birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') DESC;

Имайте предвид, че в MySQL 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. Laravel 5 PDOException не можа да намери драйвер

  2. Какво представлява MySQL еквивалентът на STUFF() в SQL Server?

  3. Как да извлечем текущата версия на MySQL система за управление на база данни (СУБД)?

  4. Как мога да променя размера на колоната в MySQL таблица?

  5. Как да репликирате MySQL база данни на друг сървър