Sunday, 11 March 2012

#8 Menghitung umur dengan sql

Berikut script sederhana untuk menghitung umur dengan sql

create function [dbo].[umur](@tanggallahir datetime, @tipe as tinyint)
   RETURNS varchar(100)
   with ENCRYPTION
   --select dbo.umur('12/17/1982', 1)
AS
Begin
DECLARE @thisYearBirthDay datetime
DECLARE @years int, @months int, @days int
Declare @hasil as varchar(30)
   
    set @thisYearBirthDay = DATEADD(year, DATEDIFF(year, @tanggallahir, getdate()), @tanggallahir)
    set @years = DATEDIFF(year, @tanggallahir, getdate()) - (CASE WHEN @thisYearBirthDay > getdate() THEN 1 ELSE 0 END)
    set @months = MONTH(getdate() - @thisYearBirthDay) - 1
    set @days = DAY(getdate() - @thisYearBirthDay) - 1
   
    if @tipe=1--full
    begin       
        set @hasil = cast(@years as varchar(2)) + ' tahun, ' + cast(@months as varchar(2)) + ' bulan, ' + cast(@days as varchar(3)) + ' hari'
    end
    else if @tipe=2--Tahun bulan
    begin
        set @hasil = cast(@years as varchar(2)) + ' tahun, ' + cast(@months as varchar(2)) + ' bulan'
    end
    else if @tipe=3--Tahun aja
    begin
        set @hasil = cast(@years as varchar(2))
    end
    else if @tipe=4--bulan aja
    begin
        set @hasil = cast(@months as varchar(2))
    end
    else if @tipe=5--hari aja
    begin
        set @hasil = cast(@days as varchar(3))
    end
   
    return @hasil
end

untuk menjalankan hasilnya caranya sangat mudah yaitu:
select birthdate, dbo.umur(birthdate,1) umur from employees where birthdate is not null


2 comments:

Koral Web said...

select trunc(months_between(sysdate,dob)/12) year,
trunc(mod(months_between(sysdate,dob),12)) month,
trunc(sysdate-add_months(dob,trunc(months_between(sysdate,dob)/12)*12+trunc(mod(months_between(sysdate,dob),12)))) day
from (Select to_date('26042013','DDMMYYYY') dob from dual);

12123123 said...

mantap boss...

Post a Comment