Rabu, 05 September 2007

Ambil Record Diantara Tanggal

Salah satu permasalahan klasik dalam berbagai proses query adalah mencari record diantara 2 buah tanggal. Sampai pada saat ini, hal ini banyak sekali ditanyakan kepada saya, serta merupakan permasalahan yang seringkali menyebabkan bug pada saat program dijalankan di komputer yang lain. Padahal sebenarnya hal ini bisa diatasi dengan mengetahui karakteristik dari proses query untuk format tanggal yang valid di sebagian besar program database (MSAccess dan MySQL;yang lain?).

Format penanggalan yang sejauh ini diketahui oleh penulis dan bisa berjalan dengan benar adalah menggunakan format YYYY-MM-DD. Perhatikan bahwa disini digit yang digunakan harus 2 digit untuk bulan dan tanggal serta 4 digit untuk tahun. Sehingga format tanggal MM-DD-YYYY seperti 12-01-2007 kadangkala tidak diproses dengan baik oleh parser pada mesin database, khususnya oleh MySQL. Karena itu diperlukan sebuah mekanisme yang tepat agar perintah SQL kita valid.

Sebagai contoh valid perintah SQL adalah berikut ini (untuk MSAccess).


SELECT NIP,NamaMahasiswa FROM mMahasiswa
WHERE dtLahir > #2007-12-01# AND dtLahir < #2007-12-31#


Sedangkan di MySQL ...


SELECT NIP,NamaMahasiswa FROM mMahasiswa
WHERE dtLahir > '2007-12-01' AND dtLahir < '2007-12-31'


Pada program saya untuk mengenerate perintah SQL saya biasanya menggunakan sebuah fungsi khusus, agar perintah SQL saya untuk tanggal bisa diproses dengan valid. Misalnya disini saya menggunakan fungsi gSQLDate(...) dengan vbScript


Function gSQLDate(sD,sM,sY)
gSQLDate = ""
If len(sD) = 1 Then sD = "0" & sD
If len(sM) = 1 Then sM = "0" & sM
gSQLDate = sY & "-" & sM & "-" & sD
If dbUse = "msaccess" Then _
gSQLDate = "#" & gSQLDate & "#" Else _
gSQLDate = "'" & gSQLDate & "'"
End Function


Sehingga pada program saya, saya tinggal menggunakannya seperti ini (dengan vbScript).


SQLString = "SELECT NIP,NamaMahasiswa FROM mMahasiswa " & _
" WHERE dtLahir > " & gSQLDate(1,12,2007) & _
" AND dtLahir < " & gSQLDate(31,12,2007)

Tidak ada komentar: