Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara Memesan Berdasarkan Tanggal di T-SQL

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu database?

  2. Pemrograman Database Python dengan SQL Express untuk Pemula

  3. 19 Sumber Daya Online untuk Mempelajari Kesalahan Desain Basis Data

  4. Memantau Sinkronisasi Replika Grup Ketersediaan

  5. Solusi tantangan generator seri angka – Bagian 5