Perhitungan Tanggal MySQL


MySQL menyediakan beberapa fungsi yang dapat anda gunakan untuk melakukan perhitungan pada tanggal, misalnya, untuk menghitung usia atau ekstrak bagian dari tanggal.

Untuk menentukan berapa tahun setiap dari binatang peliharaan anda, menghitung perbedaan di bagian tahun dari tanggal saat ini dan tanggal kelahiran, kemudian kurangi satu jika tanggal saat terjadi awal tahun kalender dari tanggal lahir. Menunjukkan query berikut, untuk setiap hewan peliharaan, tanggal kelahiran, tanggal saat ini, dan usia dalam tahun.

mysql> SELECT nama, tanggal_lahir, CURDATE(),
-> (YEAR(CURDATE())-YEAR(tanggal_lahir))
-> -(RIGHT(CURDATE(),5)<RIGHT(tanggal_lahir,5))
-> AS age
-> FROM Binatang_Peliharaan;

Di sini, YEAR() menarik keluar bagian tahun dari tanggal dan RIGHT() melepas lima karakter paling kanan yang mewakili DD-MM (tahun kalender) bagian dari tanggal. Bagian dari ekspresi yang membandingkan nilai MM-DD mengevaluasi ke 1 atau 0, yang mengatur perbedaan tahun ke tahun jika CURDATE() terjadi pada awal tahun dari kelahiran. Ekspresi lengkap agak kaku, sehingga alias (age) yang digunakan untuk membuat label kolom output yang lebih bermakna.

Query bekerja, tapi hasilnya bisa dipindai lebih mudah jika baris yang disajikan dalam urutan tertentu. Hal ini dapat dilakukan dengan menambahkan klausa ORDER BY nama untuk mengurutkan output menurut nama:

mysql> SELECT nama, tanggal_lahir, CURDATE(),
-> (YEAR(CURDATE())-YEAR(tanggal_lahir))
-> – (RIGHT(CURDATE(),5)<RIGHT(tanggal_lahir,5))
-> AS age
-> FROM Binatang_Peliharaan ORDER BY nama;

Sebuah query serupa dapat digunakan untuk menentukan usia kematian bagi binatang yang telah mati. Anda menentukan dimana binatang ini dengan memeriksa apakah nilai kematian adalah NULL. Kemudian, bagi mereka dengan nilai non-NULL nilai, hitung perbedaan antara nilai kematian dan tanggal lahir:

mysql> SELECT nama, tanggal_lahir, kematian,
-> (YEAR(kematian)-YEAR(tanggal_lahir))
-> – (RIGHT(kematian,5)<RIGHT(tanggal_lahir,5))
-> AS age
-> FROM Binatang_Peliharaan WHERE kematian IS NOT NULL ORDER BY age;

Query menggunakan kematian IS NOT NULL bukannya kematian <> NULL karena NULL adalah nilai khusus yang tidak dapat dibandingkan dengan menggunakan operator perbandingan yang biasa.

Bagaimana jika anda ingin tahu mana binatang yang ulang tahun bulan depan? Untuk jenis perhitungan ini, tahun dan hari tidak relevan, anda hanya ingin mengambil bagian bulan dari kolom tanggal lahir. MySQL menyediakan beberapa fungsi untuk mengekstraksi bagian dari tanggal, seperti YEAR(), MONTH(), dan DAYOFMONTH(). MONTH() adalah fungsi yang tepat di sini. Untuk melihat cara kerjanya, jalankan query sederhana yang menampilkan nilai dari keduanya tanggal lahir dan MONTH (kelahiran):

mysql> SELECT nama, tanggal_lahir, MONTH(tanggal_lahir) FROM Binatang_Peliharaan;

Mencari hewan dengan ulang tahun pada bulan mendatang juga sederhana. Misalkan bulan saat ini adalah April. Kemudian nilai bulan adalah 4 dan anda dapat mencari hewan yang lahir pada bulan Mei (bulan 5) seperti ini:

mysql> SELECT nama, tanggal_lahir FROM Binatang_Peliharaan WHERE MONTH(tanggal_lahir) = 5;

Ada komplikasi kecil jika bulan saat ini adalah Desember. Anda tidak bisa hanya menambahkan satu bulan ke nomor (12) dan mencari hewan yang lahir di bulan 13, karena tidak ada bulan tersebut. Sebagai gantinya, anda mencari hewan yang lahir di bulan Januari (1 bulan).

Anda dapat menulis query sehingga bekerja tidak peduli apa bulan saat ini, sehingga Anda tidak harus menggunakan nomor untuk bulan tertentu. DATE_ADD() memungkinkan anda untuk menambahkan interval waktu untuk tanggal tertentu. Jika anda menambahkan satu bulan ke nilai CURDATE(), kemudian ekstrak bagian bulan dengan MONTH(), hasilnya menghasilkan bulan di mana untuk mencari ulang tahun:

mysql> SELECT nama, tanggal_lahir FROM Binatang_Peliharaan WHERE MONTH(tanggal_lahir) = MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));

Sebuah cara yang berbeda untuk menyelesaikan tugas yang sama adalah dengan menambahkan 1 untuk mendapatkan bulan depan setelah yang sekarang setelah menggunakan fungsi modulo (MOD) untuk membungkus nilai bulan ke 0 jika saat ini 12:

mysql> SELECT nama, tanggal_lahir FROM Binatang_Peliharaan
-> WHERE MONTH(tanggal_lahir) = MOD(MONTH(CURDATE()), 12) + 1;

MONTH () mengembalikan angka antara 1 dan 12. Dan MOD (sesuatu, 12) mengembalikan angka antara 0 dan 11. Jadi penambahan harus setelah MOD (), kalau tidak kita akan pergi dari November (11) sampai Januari (1).

Iklan
  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: