◀ Previous Next ▶ Up ▲


witpoko.com


ให้ SQL

function หาวันเกิด
@birthDate = วันเกิด
@compareDate = วันที่ต้องการเปรียบเทียบ

create function dbo.getAge(@birthDate datetime, @compareDate datetime)
returns tinyint
as
begin
   declare @ans tinyint
   if year(@compareDate) > year(@birthDate) -- ปีปัจจุบันมากกว่าปีเกิด ต้องพิจารณาเดือน
       if month(@compareDate) >= month(@birthDate) -- เดือนของวันปัจจุบัน มากกว่าหรือเท่ากับเดือนเกิด
           if month(@compareDate) = month(@birthDate) -- เดือนของวันปัจจุบัน เท่ากับเดือนเกิด เดือนเดียวกัน ต้องพิจารณาวัน
               if day(@compareDate) >= day(@birthDate) -- วันของวันปัจจุบัน มากกว่าหรือเท่ากับวันเกิด
                   set @ans = datediff(year, @birthDate, @compareDate) -- วันของวันปัจจุบัน มากกว่าหรือเท่ากับวันเกิด แสดงว่า เลยวันเกิดมาแล้วหรือวันปัจจุบันคือวันเกิด  เพราะฉะนั้น เอาปี ลบ กันเป็นอายุ
               else set @ans = datediff(year, @birthDate, @compareDate) - 1 -- วันของวันปัจจุบัน น้อยกว่าวันเกิด แสดงว่า ยังไม่ถึงวันเกิด เพราะฉะนั้น เอาปี ลบ กันเป็นอายุ แล้วต้องลบออก 1 ด้วย
           else set @ans = datediff(year, @birthDate, @compareDate) -- เดือนของวันปัจจุบัน มากกว่าเดือนเกิด แสดงว่า เลยเดือนเกิดมาแล้ว  เพราะฉะนั้น เอาปี ลบ กันเป็นอายุ
       else set @ans = datediff(year, @birthDate, @compareDate) - 1 -- เดือนของวันปัจจุบัน น้อยกว่าเดือนเกิด แสดงว่า ยังไม่ถึงเดือนเกิด เพราะฉะนั้น เอาปี ลบ กันเป็นอายุ แล้วต้องลบออก 1 ด้วย
   else set @ans = 0 -- ปีปัจจุบันน้อยกว่า หรือเท่ากับปีเกิด ซึ่งไม่คิดอายุอยู่แล้ว ให้เป็น 0
   return @ans
end
go

ตัวอย่าง
select dbo.getAge(convert(datetime,'1977-08-24',120), getdate())

ลองใช้ดู ดี ไม่ดี ด่า ชม ยังไงบอกกันได้ครับ

ตอนนี้ฝึกเขียน Transec-SQL อาจจะมีมาเรื่อย ๆ ถ้ารกลูกตาก็บอกละกันครับ

ขำ ๆ โชว์ก้น


จากคุณ : un750 -[ 21 พ.ย. 49 - 13:06:05 ]





กระทู้ยอดนิยม