SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Como ordenar por data no SQLite

Problema:


Você deseja classificar as linhas por data.

Exemplo 1:


O exam tabela tem duas colunas, subject e exam_date .
assunto exam_date
Matemática 2019-12-19
Inglês 2020-01-08
Ciência 2020-01-05
Saúde 2020-01-05
Arte NULO

Você deseja classificar as linhas por exam_date .

Solução:

SELECT *
FROM exam
ORDER BY exam_date;

O resultado é assim (as linhas são classificadas em ordem crescente por exam_date ):
Assunto Data do exame
Arte NULO
Matemática 2019-12-19
Ciência 2020-01-05
Saúde 2020-01-05
Inglês 2020-01-08

Discussão:


Use o ORDER BY palavra-chave e o nome da coluna pela qual você deseja classificar. Dessa forma, você classificará os dados em ordem crescente por esta coluna. Você também pode usar o ASC palavra-chave para deixar claro que a ordem é crescente (a data mais antiga é exibida primeiro, a data mais recente é exibida por último etc.).
SELECT *
FROM exam
ORDER BY exam_date ASC;

Se você quiser ver a data mais recente primeiro e a data mais antiga por último, será necessário classificar em ordem decrescente. Use o DESC palavra-chave neste caso.
SELECT *
FROM exam
ORDER BY exam_date DESC;

Observe que no SQLite, NULL s são exibidos primeiro ao classificar em ordem crescente e por último ao classificar em ordem decrescente. Além disso, as linhas com o mesmo exam_date são exibidos em ordem aleatória (você pode ver Science segundo e Health terceiro, ou Health segundo e Science terceiro).

Exemplo 2:


O exam tabela tem as seguintes colunas:subject , exam_year , exam_month e exam_day . Os meses são dados em nomes, não em números.
assunto exam_year exam_month exam_day
Matemática 2019 Dezembro 19
Inglês 2020 janeiro 8
Ciência 2020 janeiro 5
Saúde 2020 janeiro 5
Arte NULO NULO NULO

Solução:

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;

O resultado é assim (as linhas são classificadas em ordem crescente por exam_year , exam_month e exam_day ):
assunto exam_year exam_month exam_day
Arte NULO NULO NULO
Matemática 2019 Dezembro 19
Saúde 2020 janeiro 5
Ciência 2020 janeiro 5
Inglês 2020 janeiro 8

Discussão:


Para classificar as linhas por data de exame, você precisa classificar primeiro por ano, depois por mês numérico (não pelo nome do mês) e, finalmente, por dia. Você pode converter nomes de meses em meses numéricos com um CASE WHEN cláusula. Após o CASE palavra-chave, especifique o nome da coluna. Em seguida, após cada WHEN, indique o valor nesta coluna, use a palavra-chave THEN e especifique o novo valor que deseja atribuir em vez do antigo. Aqui, a coluna é exam_month , os valores atuais nesta coluna são 'January ', 'February ', …, 'December ', e os novos valores são os meses numéricos 1 , 2 , …, 12 . Depois de terminar de converter todos os valores, lembre-se de usar o END palavra-chave para fechar o CASE WHEN cláusula. Dê uma olhada:
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

É assim que você converte um nome de mês em um número de mês. Você pode usá-lo ao classificar as linhas por data, ou seja, por ano, mês numérico e dia.
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

Dessa forma, você pode classificar as linhas em ordem crescente por data. O NULL s será exibido primeiro. Para alterar a ordem para decrescente, use o DESC palavra-chave após cada coluna no ORDER BY cláusula. Veja como toda a consulta deve ser:
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;

Observe que ao classificar em ordem decrescente no SQLite, NULL s são exibidos por último.