3 Jam Bersama Tipe Data Datetime pada SQL Server 2005
Selamat ,,, ehm ,,, (melihat jam tangan) ,,, malam.
Tanya kenapa kami sangat produktif hari ini ? Yah ,,, tak lain dan tak bukan karena deadline yang makin dekat sehingga progress yang terjadi pun makin banyak dan makin cepat. Sampai berita ini diturunkan, tim LibIDO tinggal menyelesaikan satu feature wajib terakhir, yaitu notifikasi keterlambatan bagi user/member perpustakaan. Selagi tim developer bekerja dengan seksama,,,maka kami dari tim desain akan mengisi sejenak postingan kali ini.
Ada apa dengan tipe data datetime ?
Yah,,,karena dalam LibIDO kita menangani field tanggal peminjaman dan pengembalian buku,,,maka tipe data itu pun mutlak digunakan pada database yang digunakan. Masalah muncul ketika sedang dilakukan pembuatan feature melihat laporan statistik bulanan perpustakaan. Tim kami membuat pilihan berupa dropdown list untuk memilih bulan yang ingin dilihat dan text box untuk input tahun. Keanehan muncul ketika input bulan yang dimasukkan user gagal menjadi nilai patokan untuk melakukan query. Ada apa dengan nya ???
Query terkenal yang menjadi bahan editan kami selama tiga jam adalah sebaris kode berikut :
Data2.SelectCommand = "SELECT [Peminjam], [Judul_Buku], [TglPinjam], [TglKembali] FROM [Lib_PINJAM] WHERE TglPinjam LIKE '%" + inputBulan1.SelectedValue + "%' AND TglPinjam LIKE'%" + inputTahun0.Text + "%' ORDER BY [TglPinjam] DESC";
Kecurigaan pertama yang terpikir adalah akibat database nya menggunaan region waktu lokal. Kesalahan ini pernah terjadi juga ketika menangani form penambahan katalog buku. Ketika melakukan input, format yang digunakan adalah : mm/dd/yy . Ketika melakukan query kami pun melakukan format yang sama dengan format input tersebut,namun gagal. Ternyata, format itu begitu masuk ke database malah berubah menjadi dd/mm/yy. Berangkat dari pengalaman itu kami pun melakukan hal yang sama untuk melakukan percobaan query. Untuk nilai inputBulan1.SelecteValue sementara kami ganti dengan nilai langsung yang mungkin.
Percobaan Pertama (Rasa yakin akibat pengalaman form katalog tadi siang
)
Data2.SelectCommand = "SELECT [Peminjam], [Judul_Buku], [TglPinjam],
[TglKembali] FROM [Lib_PINJAM] WHERE TglPinjam LIKE '05' AND TglPinjam LIKE'%" +
inputTahun0.Text + "%' ORDER BY [TglPinjam] DESC";
Form kami pun tidak menampilkan apa-apa. Masih tidak menyerah kami pun mencoba berbagai variasi angka untuk bulan mulai dari 5,005,0005, hingga variasi yang sudah pasti tidak mungkin seperti angka romawi V, bahasa inggris five dan bahasa sanskerta penta. Sayangnya, form kami tidak multi bahasa dan tidak memenuhi keinginan.
Percobaan Kedua (Mulai pasrah akibat semua variasi angka tidak berhasil
)
Kami pun mulai melakukan percobaan dengan patokan hanya tahun sebagai key nya. Percobaan ini berhasil sehingga kami simpulkan tipe datetime yang dipakai sudah pernah. Sehingga kebingungan mulai melanda. Panik belum datang tapi sudah mulai tercium baunya.
Percobaan Ketiga (Kegigihan masih ada,namun otak mulai malas berpikir
)
Kami pun mencoba-coba dengan menggunakan bahasa inggris. Key kami gunakan 'May'. Dan tebak,,yah,,,kita berhasil melakukan query,form kami pun menampilkan data yang kami inginkan. Ketika itu kita sudah menghabiskan waktu sekitar 45 menitan. Bau panik hilang dan kemenangan menjadi semerbak di ruangan kami. Kami pun melakukan query untuk setiap bulan-bulan yang ada.
Percobaan Keempat (Kami sudah tahu kuncinya,,gunakanlah bahasa Inggris
)
Kami pun melakukan query untuk kata2 January, June, August. Ketika keyakinan sudah mapan ternyata kami pun dihadapkan pada kenyataan bahwa kami gagal. Query hanya berhasil untuk bulan May. Sisanya nihil. Wajah2 yang sudah puas dan tenang tiba2 menjadi suntuk kembali. Kami bingung lagi. Akhirnya total orang yang ada berkumpul dan berdiskusi
Orang 1 : Aneh,,,May berhasil sisanya nggak.
Orang 2 : Mungkin untuk bulan lain pake bahasa Indonesia
Orang 3 : Gak mungkin deh ...
Orang 4 : ??????
Percobaan Kelima (Caci maki mulai hadir dan menganggap SQL Server menyebalkan
)
Semua kata2 bulan pun kami coba untuk nilai query tersebut. Seseorang mencari daftar nama bulan dalam bahasa Prancis (cukup logis,Prancis adalah negara yang terdekat dengan Inggris). Usaha ini gagal. Seseorang terbenam dalam bacaan berbagai ebook tentang SQL Server dan kembali dengan senyum kecut. Seseorang melakukan googling dan tidak menemukan artikel yang pas.
Percobaan Keenam (Pasrah [:'(] )
Kami pun melakukan percobaan dengan kode sebagai berikut :
Data2.SelectCommand = "SELECT [Peminjam], [Judul_Buku], [TglPinjam],
[TglKembali] FROM [Lib_PINJAM] WHERE TglPinjam LIKE '05' AND TglPinjam LIKE'May' ORDER BY [TglPinjam] DESC";
Berhasil !!!!!!!!!!!!! 

Ya iyalah .. memang key May berhasil dan satu-satunya alasan kami melakukan hal ini adalah untuk menaikkan semangat yang patah akibat waktu 3 jam kami habiskan untuk mengurus masalah ini.
Akhirnya tangan iseng fabul melakukan hal sebagai berikut :
mengetik June tp kekurangan e akibat terburu-butu mengetik,,,dan ajaibnya kejadian itu lah yang memberikan pencerahan. Query berhasil dan kami sampai pada satu kesimpulan walau sedikit tidak yakin.
Nilai bulan nya adalah singkatan 3 huruf lazim dalam bahasa Inggris. Jul untuk July, Jan untuk January.
Untuk konfirmasi,,kami pun mencoba untuk setiap bulan yang ada dan hasilnya ternyata memang benar.

Akhirnya kemenangan mutlak berhasil kami dapatkan. Hip hip huray.
Ini kunci untuk query dengan nama bulan
- Jan untuk January
- Feb untuk Febuary
- Mar untuk March
- Apr untuk April
- May untuk May
- Jun untuk June
- Jul untuk July
- Aug untuk August
- Sep untuk September
- Oct untuk October
- Nov untuk November
- Dec untuk December
Teman-teman seperjuangan,,,jangan sampai melakukan kesalahan yang sama. Kami membagi hal ini agar kalian tidak menghabiskan 3 jam total hanya untuk mengurusi masalah ini.
-Libido, a passion to learn -