# پایگاه‌های داده > SQL Server > T-SQL >  محاسبه سن از روی فیلد تاریخ تولد

## aliyeh

سلام دوستان 
من یک جدول دارم که اطلاعات شخصی افراد رو نگهداری میکنه.
حالا می خوام از فیلد birthdate که در این جدول وجود داره سن افراد رو محاسبه کنم و افرادی که سنشون بالاتر از مثلا 20 ساله نمایش بدم.
میشه لطف کنید و بگید چطور می تونم این کارو انجام بدم.

----------


## یوسف زالی

سلام.
در همین جا بگردید دنبال محاسبه اختلاف دو تاریخ.
اختلاف امروز رو با تولد ایشون بدست بیارید.

----------


## aliyeh

ببینید من مشکلی با محاسبه سن از روی تاریخ ندارم.خودم تابع این کار رو نوشتم.
فقط نمی دونم باید چطور دقیقا زمانیکه می خوام اطلاعات رو از دیتابیس بخونم و در گریدویو نمایش بدم از این تابع استفاده کنم.
فرض کنید اسم تابعی که این کار رو انجام میده agec هست که یک پارامتر ورودی داره و این پارامتر ورودی همون فیلد birthdate هست.حالا من می خوام دستور select  رو بنویسم
select * from TB_Char where birthdate 
بقیشو نمی دونم باید چطور بنویسم

----------


## یوسف زالی

select * from TBL where dbo.agec(birthday)> 20

----------


## aliyeh

ببخشید الان این dbo.agec که نوشتید چی هست؟ یک store procedure است؟
من تابع محاسبه سن رو با C#‎ نوشتم 
البته هنوز کامل نیست
public static int Age_caculate(string birthdate)
    {
                
        char[] sep = { '/' };
        PersianCalendar ps = new PersianCalendar();
        string date = ShamsiDate.GetFarsiDate(DateTime.Now, true);
        string[] arrDate = date.Split(sep);
        int month = Convert.ToInt32(arrDate[1]);
        int day = Convert.ToInt32(arrDate[2]);
        int year = Convert.ToInt32(arrDate[0]);


        string[] birthDate = birthdate.Split(sep);
        int birthmonth = Convert.ToInt32(birthDate[1]);
        int birthday = Convert.ToInt32(birthDate[2]);
        int birthyear = Convert.ToInt32(birthDate[0]);

        int agy;

        int agm;

        int agd;

        int age;

        agy = year - birthyear;

        agm = month - birthmonth;

        agd = day - birthday;

        if (((agm == 0) && (agd < 0)) || (agm < 0))

            age = agy - 1;

        else

            age = agy;

        return age;

    }

این دستور select ای نوشتید رو من کجا باید بنویسم؟
میشه کامل توضیح بدید من در sql تازه کارم

----------


## یوسف زالی

شما باید تابع رو در SQL بنویسید.
در مورد نوشتن تابع هم در همین تالار جستجو کنید.

----------


## WindowsXp

دوست عزیز نمی دونم نیازت چجوریه !
اما سن رو به راحتی از طریق عبارت :


Year(GetDate()) - Year(Birthdate) 

می تونی به دست بیاری !

----------

