Sabtu, 25 Februari 2012

Mencari Birthday Date In SQL Server Database

Permasalahan yang sering terjadi adalah seperti ini :

WHERE yourdate BETWEEN '01-25-2012' AND '02-05-2012'

dengan query spt itu, maka hasilnya akan muncul data antara tgl 25 januari sampai 5 februari pada tahun 2012 saja, sedangkan jika kita ingin mencari tanggal lahir, maka kita tidak membutuhka tahun, yang diperlukan hanya tanggal dan bulan nya saja..

oleh karena itu kita perlu menggunakan fungsi :

DATEPART(DAYOFYEAR, yourdate) .. fungsi tersebut berfungsi untuk mencari urutan hari pada tanggal tertentu dalam satu tahun .. hasil dari fungsi ini adalah integer antara 1 - 356

CONTOH QUERY :

SELECT * FROM siswa WHERE datepart(dayofyear,tgl_lahir) between datepart(dayofyear,'02-01-2012') and datepart(dayofyear,'02-29-2012')

RESULT :


pada query diatas tidak perlu menghiraukan tahun, karena tahun tsb hanya berfungsi untuk mengetahui tanggal yang dimaksud merupakan urutan ke berapa dalam 1 tahun, usahakan tahun nya merupakan tahun kabisat misal 2000, 2004, 2008 dll. agar dapat mewakili semua tanggal yang ada.

Namun, Permasalahan sering terjadi saat tahun kabisat, karena jmlah hari dalam 1 tahunya berbeda dengan tahun bukan kabisat. maka ada SOLUSI lain yaitu :

SELECT NM_LENGKAP, NM_PANGGIL, JKEL, convert(varchar(10), TGL_LAHIR, 103) AS 'TGL_LAHIR', SEKOLAH, GRADE, NM_ORTU, ALAMAT, NO_TELP, convert(varchar(10), TGL_DAFTAR, 103) AS 'TGL_DAFTAR', ST_SISWA, NO_SISWA, NO_REG
FROM (
SELECT NM_LENGKAP, NM_PANGGIL, JKEL, TGL_LAHIR, SEKOLAH, GRADE, NM_ORTU, ALAMAT, NO_TELP, TGL_DAFTAR, ST_SISWA, NO_SISWA, NO_REG
FROM SISWA
WHERE YEAR(TGL_LAHIR) % 4 = 0 AND DATEPART(DAYOFYEAR,TGL_LAHIR) BETWEEN DATEPART(DAYOFYEAR,'5/1/2000') AND DATEPART(DAYOFYEAR,'6/30/2000')
UNION ALL
SELECT NM_LENGKAP, NM_PANGGIL, JKEL, TGL_LAHIR, SEKOLAH, GRADE, NM_ORTU, ALAMAT, NO_TELP, TGL_DAFTAR, ST_SISWA, NO_SISWA, NO_REG
FROM SISWA
WHERE YEAR(TGL_LAHIR) % 4 <> 0 AND DATEPART(DAYOFYEAR,TGL_LAHIR) BETWEEN DATEPART(DAYOFYEAR,'5/1/2001') AND DATEPART(DAYOFYEAR,'6/30/2001')) TGL  


demikian semoga membatu.. selamat mencoba ^.^
Categories:

0 komentar:

Posting Komentar