SQLite
 sql >> Baza danych >  >> RDS >> SQLite

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

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.

nazwa birthday_month
Ronan Tisha Styczeń
Grudzień Kwiecień
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
 (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END);

Wynik wygląda tak (wiersze są posortowane w porządku rosnącym według birthday_month ):

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

Dyskusja:

Aby posortować wiersze według miesięcy, potrzebujesz miesięcy w liczbach (nie nazwach). Możesz przekonwertować nazwy miesięcy na miesiące liczbowe, używając CASE WHEN klauzula. Po CASE słowo kluczowe, określ nazwę kolumny. Następnie po każdym WHEN , podaj wartość w tej kolumnie, użyj THEN słowa kluczowego i określ nową wartość, którą chcesz przypisać zamiast starej. Tutaj kolumna to birthday_month , bieżące wartości w tej kolumnie to „January ', 'February ', …, 'December ', a nowe wartości to miesiące liczbowe 1 , 2, …, 12 . Po zakończeniu konwersji wszystkich wartości pamiętaj, aby użyć END słowo kluczowe do zamknięcia CASE WHEN klauzula. Spójrz:

CASE birthday_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

W ten sposób przekonwertujesz nazwę miesiąca na numer miesiąca. Możesz go użyć do posortowania wierszy w kolejności rosnącej według miesiąca – po prostu użyj go w ORDER BY klauzula.

Zauważ, że w SQLite, 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 drugi i Narelle Dillan trzeci lub Narelle Dillan drugi i Angie Julia trzeci). Aby zmienić kolejność na malejącą, użyj DESC słowo kluczowe po kolumnie w ORDER BY klauzula. Oto jak powinno wyglądać zapytanie:

SELECT *
FROM birthday
ORDER BY
  (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) 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. GreenDAO obsługuje wiele relacji między tabelami

  2. Zwróć początek miesiąca w SQLite

  3. Nie można zapobiec wyciekowi obiektu SQLiteConnection

  4. Przechowywanie konfiguracji w Androidzie

  5. SQLite - Nie można otworzyć pliku bazy danych