Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zamawiać według nazwy miesiąca w MySQL

Problem:

Chcesz posortować wiersze według numeru miesiąca, podanych nazw miesięcy (chcesz, aby styczeń był wyświetlany jako pierwszy, grudzień jako ostatni).

Przykład:

birthday tabela zawiera dwie kolumny:imię i nazwisko oraz birthday_month . Miesiące podane są w imionach, a nie w liczbach.p>

name birthday_month
Ronan Tisha NULL
Grudzień 2020
Angie Julia Kwiecień
Narelle Dillan Kwiecień
Purdie Casey Styczeń
Donna Nell NULL
Blaze Graeme październik

Chcesz posortować wiersze według birthday_month .

Rozwiązanie:

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

Wynik wygląda tak:

nazwa birthday_month
Donna Nell NULL
Purdie Casey Styczeń
Angie Julia Kwiecień
Narelle Dillan Kwiecień
Blaze Graeme październik
Ronan Tisza NULL
Grudzień październik

Dyskusja:

Aby zamówić według miesiąca, utwórz datę z tym miesiącem. Aby to zrobić, użyj funkcji STR_TO_DATE(). Jeśli masz datę zapisaną jako ciąg w 'Year Month Day ', możesz rzutować go na datę za pomocą STR_TO_DATE(date_string, '%Y %M %d') .

Najpierw musisz utworzyć ciąg znaków za pomocą funkcji CONCAT(). Rok może być dowolnym rokiem (np. 0001 ), a dzień może być dowolnym dniem (np. 01 ):

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

CONCAT() funkcja łączy wszystkie argumenty w jeden ciąg. Ciąg powinien znajdować się w 'Year Month Day ', więc drugim argumentem powinien być birthday_month; pierwszy i trzeci argument muszą być po prostu w poprawnym formacie.

Następnie musisz przekonwertować ten ciąg na datę za pomocą STR_TO_DATE(date_string, '%Y %M %d') funkcjonować. Drugim argumentem tej funkcji jest format daty. %Y oznacza rok, %M oznacza miesiąc (pełna nazwa, a nie numer) i %d oznacza dzień.

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

Użyj go z ORDER BY klauzula sortowania wierszy w porządku rosnącym według daty. Jeśli chcesz zobaczyć wiersze w kolejności malejącej, po prostu dołącz DESC słowo kluczowe, takie jak to:

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

Zauważ, że w MySQL NULL s są wyświetlane jako pierwsze przy sortowaniu w porządku rosnącym i jako ostatnie przy sortowaniu w porządku malejącym. Ponadto wiersze z tym samym birthday_month są wyświetlane w losowej kolejności (możesz zobaczyć Angie Julia trzeci i Narelle Dillan czwarty lub Narelle Dillan trzecia i Angie Julia czwarty).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przełączanie awaryjne i powrót po awarii w Amazon RDS

  2. Wydajność wkładania wsadowego JDBC

  3. Jak przechowywać GUID w tabelach MySQL?

  4. JSON_CONTAINS_PATH() Przykłady w MySQL

  5. Zmień format daty (w bazie danych lub danych wyjściowych) na dd/mm/rrrr - PHP MySQL