Problema:
Vuoi ordinare le righe per data.
Esempio 1:
L'exam
la tabella ha due colonne, subject
e exam_date
.
Soggetto | Data dell'esame |
---|---|
Matematica | 19-12-2019 |
Inglese | 08-01-2020 |
Scienza | 05-01-2020 |
Salute | 05-01-2020 |
Arte | NULLO |
Vuoi ordinare le righe per exam_date
.
Soluzione:
SELECT * FROM Exam ORDER BY ExamDate;
Il risultato è simile a questo (le righe sono ordinate in ordine crescente per ExamDate
):
Soggetto | Data dell'esame |
---|---|
Arte | NULLO |
Scienza | 05-01-2020 |
Salute | 05-01-2020 |
Inglese | 08-01-2020 |
Matematica | 19-12-2019 |
Discussione:
Usa il ORDER BY
parola chiave e il nome della colonna in base alla quale si desidera eseguire l'ordinamento. In questo modo, ordinerai i dati in ordine crescente in base a questa colonna. Puoi anche usare l'ASC
parola chiave per chiarire che l'ordine è crescente (la prima data viene mostrata per prima, l'ultima data viene mostrata per ultima, ecc.).
SELECT * FROM Exam ORDER BY ExamDate ASC;
Se desideri visualizzare prima la data più recente e quella più recente per ultima, è necessario ordinare in ordine decrescente. Usa il DESC
parola chiave in questo caso.
SELECT * FROM Exam ORDER BY ExamDate DESC;
Nota che in T-SQL, NULL
I messaggi vengono visualizzati per primi quando si ordina in ordine crescente e per ultimi quando si ordina in ordine decrescente. Inoltre, le righe con lo stesso ExamDate
sono visualizzati in ordine non deterministico (potresti vedere Science
secondo e Health
terzo, o Health
secondo e Science
terzo).
Esempio 2:
L'exam
tabella ha le seguenti colonne:subject
, exam_year
, exam_month
e exam_day
. Il mese è indicato per nome, non per numero.
Soggetto | Anno d'esame | Mese dell'Esame | Giorno degli esami |
---|---|---|---|
Matematica | 2019 | Dicembre | 19 |
Inglese | 2020 | gennaio | 8 |
Scienza | 2020 | gennaio | 5 |
Salute | 2020 | gennaio | 5 |
Arte | NULLO | NULLO | NULLO |
Vuoi ordinare le righe in base alla data dell'esame.
Soluzione:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Il risultato è simile a questo (le righe sono ordinate in ordine crescente per ExamYear
, ExamMonth
e ExamDate
):
Soggetto | Anno d'esame | Mese dell'Esame | Giorno degli esami |
---|---|---|---|
Arte | NULLO | NULLO | NULLO |
Salute | 2020 | gennaio | 5 |
Scienza | 2020 | gennaio | 5 |
Inglese | 2020 | gennaio | 8 |
Matematica | 2019 | Dicembre | 19 |
Discussione:
Per raggruppare per data, creare valori di data dai valori di anno, mese e giorno. A tale scopo, utilizzare la funzione CAST(). Se hai una data memorizzata come stringa nel 'YYYY-Month-DD
', puoi trasmetterlo a una data usando CAST(date_string AS date)
. Per prima cosa devi creare una stringa, usando anche la funzione CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
L'espressione CAST(ExamYear AS VARCHAR(4))
crea una stringa dal numero memorizzato in ExamYear
. L'espressione CAST(ExamDay AS VARCHAR(2))
crea una stringa dal numero memorizzato in ExamDay
. ExamMonth
è già una stringa, quindi non è necessario eseguirne il cast.
Quindi, devi trasmettere questa stringa a una data utilizzando CAST(date_string AS date)
funzione:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Usalo con un ORDER BY
clausola per ordinare le righe in ordine crescente per data. Se desideri visualizzare le righe in ordine decrescente, aggiungi semplicemente un DESC
parola chiave, come questa:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;