Beberapa waktu kemarin ada case dimana saya harus membuat filter pencarian data karyawan berdasarkan rentang usia, field yang akan kita gunakan yaitu field tanggal lahir karyawan.
Baik, langsung saja kita persiapkan database, table, dan sample data yang di butuhkan
Buat database dengan nama db_hrd.
create database db_hrd;
Kemudian gunakan database tersebut dengan perintah.
use db_hrd;
Buat table dengan nama tbl_karyawan dengan beberapa field sebagai berikut.
CREATE TABLE IF NOT EXISTS "tbl_karyawan" ( "id" int(10) NOT NULL auto_increment, "nama" varchar(100), "jenis_kelamin" varchar(1), "tgl_lahir" date, PRIMARY KEY( "id" ) );
Isi beberapa contoh data karyawan.
INSERT INTO tbl_karyawan (nama,jenis_kelamin,tgl_lahir) VALUES ("VERONIKA BATTUNG", "P", "1996-01-02"), ("YOVIT TANAN", "L", "1997-11-12"), ("ASRUL SANI", "L", "1998-10-11"), ("MAWARNI", "P", "1997-05-06"), ("ZAINUDDIN", "L", "1997-03-02"), ("MUH IQBAL MAULANA HAEDAR", "L", "1994-08-09"), ("ARMIN TOMY S", "L", "1993-02-03"), ("YAHYA", "L", "1990-02-03"), ("ARLI RAZALI", "L", "1998-01-02"), ("JHEIN CHRISTINA", "P", "1998-02-03"), ("ADE AISYAH", "P", "1997-02-03"), ("SITI MARYAM", "P", "2003-05-06"), ("NISMAN", "L", "1991-12-13"), ("JALALUDDIN", "L", "1992-03-04"), ("DENI SUPRIANTO", "L", "2000-05-06"), ("IRWAN", "L", "1986-09-10"), ("RISALDI", "L", "2000-09-10"), ("IRMAN MAULANA", "L", "1995-11-12"), ("ADRIAWAN", "L", "1991-07-08"), ("RESKIANI PUTRI", "P", "1996-10-11") ;
Nah sekarang saatnya kita bermain main dengan query, pertama kita coba tentukan usia dari karyawan berdasarkan field tgl_lahir dengan menggunakan function TIMESTAMPDIFF().
SELECT nama, jenis_kelamin, tgl_lahir, TIMESTAMPDIFF(YEAR, tgl_lahir , curdate()) AS usia FROM tbl_karyawan; +--------------------------+---------------+------------+------+ | nama | jenis_kelamin | tgl_lahir | usia | +--------------------------+---------------+------------+------+ | VERONIKA BATTUNG | P | 1996-01-02 | 26 | | YOVIT TANAN | L | 1997-11-12 | 24 | | ASRUL SANI | L | 1998-10-11 | 23 | | MAWARNI | P | 1997-05-06 | 24 | | ZAINUDDIN | L | 1997-03-02 | 24 | | MUH IQBAL MAULANA HAEDAR | L | 1994-08-09 | 27 | | ARMIN TOMY S | L | 1993-02-03 | 28 | | YAHYA | L | 1990-02-03 | 31 | | ARLI RAZALI | L | 1998-01-02 | 24 | | JHEIN CHRISTINA | P | 1998-02-03 | 23 | | ADE AISYAH | P | 1997-02-03 | 24 | | SITI MARYAM | P | 2003-05-06 | 18 | | NISMAN | L | 1991-12-13 | 30 | | JALALUDDIN | L | 1992-03-04 | 29 | | DENI SUPRIANTO | L | 2000-05-06 | 21 | | IRWAN | L | 1986-09-10 | 35 | | RISALDI | L | 2000-09-10 | 21 | | IRMAN MAULANA | L | 1995-11-12 | 26 | | ADRIAWAN | L | 1991-07-08 | 30 | | RESKIANI PUTRI | P | 1996-10-11 | 25 | +--------------------------+---------------+------------+------+
Sekarang kita sudah mendapatkan usia dari karyawan, sedikit penjelasan parameter yang ada pada function TIMESTAMPDIFF(YEAR, tgl_lahir , curdate()) :
- YEAR : data yang akan dibandingkan adalah tahun.
- tgl_lahir : ambil tahun dari field tgl_lahir.
- curdate() : kita akan membandingkan tahun yang ada pada field tgl_lahir dengan tahun pada saat ini.
Untuk penjelasan penggunakaan TIMESTAMPDIFF() bisa lihat dokumentasi disini.
Setelah mendapatkan usia, sekarang kita ingin menampilkan data karyawan berdasarkan rentang usia dari 20 sampai 25 tahun.
SELECT nama, jenis_kelamin, tgl_lahir, TIMESTAMPDIFF(YEAR, tgl_lahir , curdate()) AS usia FROM tbl_karyawan HAVING usia >= 20 and usia <= 25; +-----------------+---------------+------------+------+ | nama | jenis_kelamin | tgl_lahir | usia | +-----------------+---------------+------------+------+ | YOVIT TANAN | L | 1997-11-12 | 24 | | ASRUL SANI | L | 1998-10-11 | 23 | | MAWARNI | P | 1997-05-06 | 24 | | ZAINUDDIN | L | 1997-03-02 | 24 | | ARLI RAZALI | L | 1998-01-02 | 24 | | JHEIN CHRISTINA | P | 1998-02-03 | 23 | | ADE AISYAH | P | 1997-02-03 | 24 | | DENI SUPRIANTO | L | 2000-05-06 | 21 | | RISALDI | L | 2000-09-10 | 21 | | RESKIANI PUTRI | P | 1996-10-11 | 25 | +-----------------+---------------+------------+------+
Kemudian jika kita ingin menurutkan berdasarkan usia karyawan, maka querynya seperti ini
SELECT nama, jenis_kelamin, tgl_lahir, TIMESTAMPDIFF(YEAR, tgl_lahir , curdate()) AS usia FROM tbl_karyawan HAVING usia >= 20 and usia <= 25 ORDER BY usia ASC; +-----------------+---------------+------------+------+ | nama | jenis_kelamin | tgl_lahir | usia | +-----------------+---------------+------------+------+ | DENI SUPRIANTO | L | 2000-05-06 | 21 | | RISALDI | L | 2000-09-10 | 21 | | ASRUL SANI | L | 1998-10-11 | 23 | | JHEIN CHRISTINA | P | 1998-02-03 | 23 | | YOVIT TANAN | L | 1997-11-12 | 24 | | MAWARNI | P | 1997-05-06 | 24 | | ZAINUDDIN | L | 1997-03-02 | 24 | | ARLI RAZALI | L | 1998-01-02 | 24 | | ADE AISYAH | P | 1997-02-03 | 24 | | RESKIANI PUTRI | P | 1996-10-11 | 25 | +-----------------+---------------+------------+------+
Semoga bermanfaat.