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

Jak zamawiać według daty w SQLite

Problem:

Chcesz posortować wiersze według daty.

Przykład 1:

exam tabela ma dwie kolumny, subject i exam_date .

temat data_egzaminu
Matematyka 2019-12-19
angielski 2020-01-08
Nauka 2020-01-05
Zdrowie 2020-01-05
Sztuka NULL

Chcesz posortować wiersze według exam_date .

Rozwiązanie:

SELECT *
FROM exam
ORDER BY exam_date;

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

Temat Data egzaminu
Sztuka NULL
Matematyka 2019-12-19
Nauka 2020-01-05
Zdrowie 2020-01-05
angielski 2020-01-08

Dyskusja:

Użyj ORDER BY słowo kluczowe i nazwę kolumny, według której chcesz sortować. W ten sposób posortujesz dane w kolejności rosnącej według tej kolumny. Możesz także użyć ASC słowo kluczowe, aby było jasne, że kolejność rośnie (najwcześniejsza data jest wyświetlana jako pierwsza, najnowsza data jest wyświetlana jako ostatnia itd.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Jeśli chcesz, aby najnowsza data była widoczna jako pierwsza, a najwcześniejsza jako ostatnia, musisz posortować dane w kolejności malejącej. Użyj DESC w tym przypadku słowo kluczowe.

SELECT *
FROM exam
ORDER BY exam_date DESC;

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 tą samą exam_date są wyświetlane w losowej kolejności (możesz zobaczyć Science drugi i Health trzeci lub Health drugi i Science trzeci).

Przykład 2:

exam tabela ma następujące kolumny:subject , exam_year , exam_month i exam_day . Miesiące podane są w imionach, a nie w liczbach.

temat rok_egzaminacyjny egzamin_miesiąc dzień_egzaminacyjny
Matematyka 2019 grudzień 19
angielski 2020 Styczeń 8
Nauka 2020 Styczeń 5
Zdrowie 2020 Styczeń 5
Sztuka NULL NULL NULL

Rozwiązanie:

SELECT *
FROM exam
ORDER BY exam_year,
 (CASE exam_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),
  exam_day;

Wynik wygląda tak (wiersze są posortowane w porządku rosnącym według exam_year , exam_month i exam_day ):

temat rok_egzaminacyjny egzamin_miesiąc dzień_egzaminacyjny
Sztuka NULL NULL NULL
Matematyka 2019 grudzień 19
Zdrowie 2020 Styczeń 5
Nauka 2020 Styczeń 5
angielski 2020 Styczeń 8

Dyskusja:

Aby posortować wiersze według daty egzaminu, musisz najpierw posortować według roku, następnie według liczbowego miesiąca (nie nazwy miesiąca), a na końcu według dnia. Możesz przekonwertować nazwy miesięcy na miesiące liczbowe za pomocą 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 słowa kluczowego THEN i określ nową wartość, którą chcesz przypisać zamiast starej. Tutaj kolumna to exam_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 exam_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ć podczas sortowania wierszy według daty, to znaczy według roku, miesiąca numerycznego i dnia.

ORDER BY exam_year,
 (CASE exam_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),
  exam_day

W ten sposób możesz sortować wiersze w porządku rosnącym według daty. NULL s zostanie wyświetlone jako pierwsze. Aby zmienić kolejność na malejącą, użyj DESC słowo kluczowe po każdej kolumnie w ORDER BY klauzula. Oto jak powinno wyglądać całe zapytanie:

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  (CASE exam_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,
  exam_day DESC;

Zwróć uwagę, że podczas sortowania w kolejności malejącej w SQLite, NULL s są wyświetlane jako ostatnie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aplikacja ulega awarii podczas instalacji z błędem sqlite3_exec — Nie można ustawić trybu synchronicznego =1 (normalny)

  2. SQLite JSON_PATCH()

  3. Android :Jak dynamicznie ładować obraz z serwera według nazwy z SQlite

  4. java.lang.IllegalArgumentException:kolumna '_id' nie istnieje

  5. Android SQLiteOpenHelper:Dlaczego metoda onCreate() nie jest wywoływana?