Saturday, 30 March 2013

SQL : Date Range Query



Salah satu tipe data yang paling banyak dijumpai pada database adalah tipe data DATE. Untuk itu kita akan membahasa sedikit query yang menggunakan tipe data Date. Kita hanya akan membahas untuk Database (DB) Access dan MySQL. Dan berikut ini query-query untuk mengambil data dalam jarak waktu tertentu (Penulisan query SQL tidak case sensitive, jadi dapat ditulis dengan huruf besar atau kecil) :


1. Jika ingin mengambil data pada tanggal tertentu , misal 1-Januari 2012 sampai 15-Juli-2012 pada DB Access:
SELECT * FROM myTable WHERE CDATE(Tanggal) BETWEEN #01/01/2012# AND #07/15/2012#
Dengan format # Bulan / Hari / Tahun # . Pada MySQL :
SELECT * FROM myTable WHERE DATE(Tanggal) BETWEEN '2012-01-01' AND '2012-07-15'
Sedikit berbeda untuk fungsi yang digunakan yaitu Date() dan format tanggal yang digunakan 'Tahun - Bulan - Hari' .


2. Jika ingin mengambil data sesuai bulan tertentu dan tahun tertentu, misal bulan Desember 2012 pada DB Access dan juga MySQL:
SELECT * FROM myTable WHERE MONTH(Tanggal) = 12 AND YEAR(Tanggal) = 2012
Dapat juga mencari pada bulan tertentu tanpa memperdulikan tahun dengan menghapus pencarian pada fungsi Year(). Untuk pencarian hari gunakan fungsi Day(), contoh :
SELECT * FROM myTable WHERE DAY(Tanggal) = 5 AND MONTH(Tanggal) = 12 AND YEAR(Tanggal) = 2012
Pencarian untuk tanggal 5.


3. Jika ingin mencari dari bulan tertentu contoh dari Februari sampai Agustus pada tahun 2011, dapat menggunakan query berikut:
SELECT * FROM myTable WHERE MONTH(Tanggal) >= 2 AND MONTH(Tanggal) <= 8 AND YEAR(Tanggal) = 2011
Bagaimana jika ingin mencari dari bulan Agustus 2011 sampai Februari 2013? Apakah kode berikut berfungsi?
SELECT * FROM myTable WHERE MONTH(Tanggal) >= 2 AND MONTH(Tanggal) <= 8 AND YEAR(Tanggal) >= 2011 AND YEAR(Tanggal) <= 2013
Query diatas memang berjalan tetapi tidak akan menampilkan data pada bulan 1 (Jan), dan 9 (Sep) sampai 12 (Des). Jika menggunakan BETWEEN jarak tanggal yang dicari harus sesuai, contoh pada MySQL:
SELECT * FROM myTable WHERE DATE(Tanggal) BETWEEN '2011-08-01' AND '2013-02-28'
Untuk tanggal awal (contoh diatas 2011-08-01), kita dapat menginisialisasi 1 pada hari. Dan untuk tanggal akhir pencarian, terkadang kita bingung menentukan hari akhirnya , contoh tanggal 30 atau 31. Jika terdapat data pada tanggal 31 dan kita mengatur hanya sampai tanggal 30 tentu hasilnya tidak sesuai dengan yang kita inginkan. Untuk itu kita perlu memodifikasinya menjadi seperti berikut :
SELECT * FROM myTable WHERE (DATE(Tanggal) BETWEEN '2011-08-01' AND '2013-02-28') or (MONTH(Tanggal) = 2 AND YEAR(Tanggal) = 2013)


Semoga saja nanti bisa membuat game dengan memanfaatkan database seperti ini, hehehehe. :D ~

- krofz

No comments:

Post a Comment

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top