Masalah:
Anda ingin mengurutkan baris berdasarkan tanggal.
Contoh 1:
exam
tabel memiliki dua kolom, subject
dan exam_date
.
Subjek | Tanggal Ujian |
---|---|
Matematika | 2019-12-19 |
Bahasa Inggris | 08-01-2020 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Seni | NULL |
Anda ingin mengurutkan baris berdasarkan exam_date
.
Solusi:
SELECT * FROM Exam ORDER BY ExamDate;
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan ExamDate
):
Subjek | Tanggal Ujian |
---|---|
Seni | NULL |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Bahasa Inggris | 08-01-2020 |
Matematika | 2019-12-19 |
Diskusi:
Gunakan ORDER BY
kata kunci dan nama kolom yang ingin Anda urutkan. Dengan cara ini, Anda akan mengurutkan data dalam urutan menaik menurut kolom ini. Anda juga dapat menggunakan ASC
kata kunci untuk memperjelas bahwa urutannya naik (tanggal paling awal ditampilkan terlebih dahulu, tanggal terakhir ditampilkan terakhir, dll.).
SELECT * FROM Exam ORDER BY ExamDate ASC;
Jika Anda ingin melihat tanggal terakhir terlebih dahulu dan tanggal paling awal terakhir, Anda harus mengurutkan dalam urutan menurun. Gunakan DESC
kata kunci dalam hal ini.
SELECT * FROM Exam ORDER BY ExamDate DESC;
Perhatikan bahwa dalam T-SQL, NULL
s ditampilkan pertama kali saat mengurutkan dalam urutan menaik dan terakhir saat mengurutkan dalam urutan menurun. Juga, baris dengan ExamDate
yang sama ditampilkan dalam urutan non-deterministik (Anda mungkin melihat Science
kedua dan Health
ketiga, atau Health
kedua dan Science
ketiga).
Contoh 2:
exam
tabel memiliki kolom berikut:subject
, exam_year
, exam_month
, dan exam_day
. Bulan diberi nama, bukan nomor.
Subjek | TahunUjian | UjianBulan | Hari Ujian |
---|---|---|---|
Matematika | 2019 | Desember | 19 |
Bahasa Inggris | 2020 | Januari | 8 |
Ilmu | 2020 | Januari | 5 |
Kesehatan | 2020 | Januari | 5 |
Seni | NULL | NULL | NULL |
Anda ingin mengurutkan baris menurut tanggal ujian.
Solusi:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan ExamYear
, ExamMonth
, dan ExamDate
):
Subjek | TahunUjian | UjianBulan | Hari Ujian |
---|---|---|---|
Seni | NULL | NULL | NULL |
Kesehatan | 2020 | Januari | 5 |
Ilmu | 2020 | Januari | 5 |
Bahasa Inggris | 2020 | Januari | 8 |
Matematika | 2019 | Desember | 19 |
Diskusi:
Untuk mengelompokkan menurut tanggal, buat nilai tanggal dari tahun, bulan, dan nilai hari. Untuk melakukannya, gunakan fungsi CAST(). Jika Anda memiliki tanggal yang disimpan sebagai string di 'YYYY-Month-DD
', Anda dapat mentransmisikannya ke tanggal menggunakan CAST(date_string AS date)
. Pertama, Anda perlu membuat string, juga menggunakan fungsi CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Ekspresi CAST(ExamYear AS VARCHAR(4))
membuat string dari nomor yang disimpan di ExamYear
. Ekspresi CAST(ExamDay AS VARCHAR(2))
membuat string dari nomor yang disimpan di ExamDay
. ExamMonth
sudah menjadi string, jadi tidak perlu membuangnya.
Kemudian, Anda perlu memasukkan string ini ke tanggal menggunakan CAST(date_string AS date)
fungsi:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Gunakan dengan ORDER BY
klausa untuk mengurutkan baris dalam urutan menaik berdasarkan tanggal. Jika Anda ingin melihat baris dalam urutan menurun, cukup tambahkan DESC
kata kunci, seperti ini:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;