Sintak Query Tanggal pada MySQL (menghitung umur)

Archived in the category: Database, MySQL
Posted by win~ on 19 Mar 09 - 17 Comments

Date/Tanggal merupakan salah satu type data yang sangat penting dalam Database, namun kebanyakan para progammer pemula menghidari type data ini, alasannya adalah karena SUSAH untuk dibuat interface (padahal sebenarnya nilai validasinya jauh lebih penting)

Dalam database mysql, tanggal ditampilkan dalam Format yyyy-mm-dd (misal 2009-01-01, untuk 1 Januari 2009).Sehingga format tersebut terkadang kurang nyaman untuk user()…¬† nah bagaimana menyikapi hal ini agar format tanggal dapat tersaji dengan format yg biasa kita temui…yaitu 01-01-2009 untuk 1 Januari 2009…

Jika kita mempunyai suatu tabel, misal tbl_mhs dengan kolom sebagai berikut


1:
2:
3:
4:
5:
6:
7:
8:
9:

mysql> select * from tbl_mhs;
+-----------+-------+----------+---------+------+------------+
| nim       | nama  | alamat   | jurusan | JK   | tgl_lahir  |
+-----------+-------+----------+---------+------+------------+
| TI7208001 | SANTI | KLATEN   | 01      | P    | 2008-12-17 |
| TI7208002 | RYAN  | SOLO     | 02      | L    | 2008-08-11 |
| TI7208003 | ANDRI | BOYOLALI | 01      | L    | 2008-07-08 |
+-----------+-------+----------+---------+------+------------+
3 rows in set (0.00 sec)

Jika kita ingin menampilkan dalam format dd-mm-yyyy dapat digunakan perintah seperti di bawah ini:


1:
2:
3:
4:
5:
6:
7:
8:
9:

mysql> select nim,nama,alamat,
date_format(tgl_lahir,'%d-%m-%Y') tgl_lahir from tbl_mhs;
+-----------+-------+----------+-----------------------------------+
| nim       | nama  | alamat   | tgl_lahir |
+-----------+-------+----------+-----------------------------------+
| TI7208001 | SANTI | KLATEN   | 17-01-2008|
| TI7208002 | RYAN  | SOLO     | 11-08-2008|
| TI7208003 | ANDRI | BOYOLALI | 08-07-2008|
+-----------+-------+----------+-----------------------------------+
3 rows in set (0.00 sec)

OK… data tanggal lahir sudah tersaji dengan baik…

Nah.. selanjutnya dalam MySQL kita dapat mengambil nilai tahun atau bulan saja pada field yg bertipe date, Caranya dengan menggunakan perintah


1:
2:
3:
4:
5:
6:
7:

mysql> select MONTH(curdate()) BULAN;
+-------+
| BULAN |
+-------+
|     3 |
+-------+
1 row in set (0.00 sec)

Artinya adalah

  1. Curdate merupakan fungsi untuk mengambil tanggal sekarang
  2. Month digunakan untuk menampilkan bulan pada suatu tangga, sedangk untuk mengambil tahun dapat digunakan function Year

Dari function ini kita dapat menghitung umur pembulatan seseorang dengan cara  sebagai berikut


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

mysql> select nim,nama,alamat,tgl_lahir,
(year(curdate())-year(tgl_lahir)) as umur FROM tbl_mhs;
+-----------+-------+----------+------------+------+
| nim       | nama  | alamat   | tgl_lahir  | umur |
+-----------+-------+----------+------------+------+
| TI7208001 | SANTI | KLATEN   | 2008-12-17 |    1 |
| TI7208002 | RYAN  | SOLO     | 2008-08-11 |    1 |
| TI7208003 | ANDRI | BOYOLALI | 2008-07-08 |    1 |
+-----------+-------+----------+------------+------+
3 rows in set (0.02 sec)

Ingat cara ini akan membulatkan umur… jadi jika misal sekarang 01 januari 2009, tanggal lahirnya 20 Desember 2008 akan tetap dihitung 1 Tahun

17 comments for “Sintak Query Tanggal pada MySQL (menghitung umur)”

1

wah klo kayak gitu, berarti gak valid donk datanya???
masa baru umur 1 hr udah terhitung 1 tahun??? ^_^

May 4th, 2009 at 3:55 pm
2
win~

Untuk mendapatkan selisih tahun sintaknya benar mas… tapi untuk mendapatkan selisih hari memang salah…
Berikut SQL untuk menghitung Selisih hari
SELECT TO_DAYS(now()) – TO_DAYS(tgl_lahir) from tbl_mhs;

atau

SELECT DATEDIFF(now(),tgl_lahir) from tbl_mhs;

May 5th, 2009 at 9:57 am
3

makasih atas infonya.

May 23rd, 2009 at 12:31 pm
4

trims infonya..
bermanfaat sekali ni
mampir bos..

July 8th, 2009 at 9:18 pm
5
apriyana

sangat membantu…tanks

March 4th, 2010 at 10:02 pm
6
vierm_186

saya ingin menanyakan tadi kan mengambil nilai dari bulan, ex. “select month(now())” nah sekarang klo mengambil bulan dari nilai gimana mas,,. ex.. “bulan ke 5 adalah mei”
terimakasih,,

May 25th, 2010 at 7:07 am
7

mas-mas semua ikut nimbrung
kl semisal contoh kasus seperti ini bagaimana mohon petunjuk :
umur banyak
1<4 th 80
4<10 th 70
mohon bantuan

August 2nd, 2010 at 11:43 am
8

mantapppp gan…..

August 5th, 2010 at 8:45 am
9

wah, mantap gan. pas bener sama yang aku butuhin sekarang. thanks ya

August 5th, 2010 at 7:56 pm
10
win~

@vierm_186: Gunakan select date_format()
@samsul: untuk menghitung aggregat silakan gunakan sintak group by utk kasus tsb, sekilas bisa disolusikan dengan perintah Union yaitu
select “1=1 and umur <4
union
Select “4=4 and umur <10

@freddo &yanuar: Thx

August 18th, 2010 at 5:25 am
11
raden

Kalo pengen nyari usianya 20 tahun, 2 bulan, 2 hari gmn yak.?

September 19th, 2010 at 5:11 am
12
mucliis

buat mas-masnya n mbak-mbaknya apakah mysql bisa untuk membuat store prosedure and function and triger kalau bisa bagaimana yaaa contoh sintax nya

November 29th, 2010 at 11:08 am
13
win~

Store Procedure dapat digunakan dalam versi 5.02 ke atas [cmiiw]. Biasanya digunakan untuk memanipulasi tampilan query.

Sedang trigger biasnaya digunakan untuk memicu suatu pekerjaan misal, mendelete record di tabel B ketika record di Tabel A dihapus sintaknya dapat diletakkan di Fire On Delete pada tabel A yi sbb:
Delete tabel_B where id=OLD.id

atau jika ingin memasukkan record baru di tabel B ketika tabel A diinsert
Letak Trigger di Fire On Insert tabel A yi sbb
Insert Tabel_B (id) values (NEW.id)

kira-kira seperti itu

December 2nd, 2010 at 3:07 am
14
yuzt

mohon bantuannya KK,, gmn klo menampilkan umurnya yg kurang dari 20 tahun. sedangkan datanya banyak ada yang lebih dr 20 thn..

January 2nd, 2011 at 2:17 pm
15
win~

coba kalau
select nama,tanggal_lahir from tbl_anggota where (year(now())-year(tanggal_lahir) <20

January 3rd, 2011 at 5:14 am
16
saiful anwar

kalau menghitung umur dengan delphi bagaimana mas

February 27th, 2011 at 8:56 am
17

bagus banget artikelnya.. membantu banget buat menyelesaikan tugas kuliahku.. makasih ya win~

March 11th, 2011 at 2:30 pm

Laeave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-Spam Image