שאלה על גיל
אני בונה טופס שיש בו שלוש שדות שמרכיבות תאריך לידה מלא יום,חודש,שנה
אני רוצה להכניס את התאריך לידה לדטהבייס ואני
מתלבט באיזה פורמט להכניס אותו. אם לשרשר אותם כשדה אחד "BDATE" מסוג DATETIME
או שלוש שדות BDAY,BMONTH,BYEAR מסוג INT
כרגע יש לי בעיה עם האופציה של שלוש שדות מסוג INT כי כשאני מנסה לשלוף את הגיל דרך פונקציה הוא נותן לי גיל כוזב.
להלן השאילתא:
SELECT dbo.fAgeCalc(u.Bday+u.Bmonth+u.Byear,GETDATE()) as Age FROM USERS u
להלן הפונקציה:
ALTER function [dbo].[fAgeCalc](@DOB datetime,@Date datetime)
returns smallint
as
----------------------------------------------------
-- * Created By David Wiseman, Updated 03/11/2006
-- * http://www.wisesoft.co.uk
-- * This function calculates a persons age at a
-- * specified date from their date of birth.
-- * Usage:
-- * select dbo.fAgeCalc('1982-04-18',GetDate())
-- * select dbo.fAgeCalc('1982-04-18','2006-11-03')
----------------------------------------------------
begin
return (
select case when month(@DOB)>month(@Date) then datediff(yyyy,@DOB,@Date)-1
when month(@DOB)<month(@Date) then datediff(yyyy,@DOB,@Date)
when month(@DOB)=month(@Date) then
case when day(@DOB)>day(@Date)
then datediff(yyyy,@DOB,@Date)-1
else datediff(yyyy,@DOB,@Date) end
end)
end
אני בונה טופס שיש בו שלוש שדות שמרכיבות תאריך לידה מלא יום,חודש,שנה
אני רוצה להכניס את התאריך לידה לדטהבייס ואני
מתלבט באיזה פורמט להכניס אותו. אם לשרשר אותם כשדה אחד "BDATE" מסוג DATETIME
או שלוש שדות BDAY,BMONTH,BYEAR מסוג INT
כרגע יש לי בעיה עם האופציה של שלוש שדות מסוג INT כי כשאני מנסה לשלוף את הגיל דרך פונקציה הוא נותן לי גיל כוזב.
להלן השאילתא:
SELECT dbo.fAgeCalc(u.Bday+u.Bmonth+u.Byear,GETDATE()) as Age FROM USERS u
להלן הפונקציה:
ALTER function [dbo].[fAgeCalc](@DOB datetime,@Date datetime)
returns smallint
as
----------------------------------------------------
-- * Created By David Wiseman, Updated 03/11/2006
-- * http://www.wisesoft.co.uk
-- * This function calculates a persons age at a
-- * specified date from their date of birth.
-- * Usage:
-- * select dbo.fAgeCalc('1982-04-18',GetDate())
-- * select dbo.fAgeCalc('1982-04-18','2006-11-03')
----------------------------------------------------
begin
return (
select case when month(@DOB)>month(@Date) then datediff(yyyy,@DOB,@Date)-1
when month(@DOB)<month(@Date) then datediff(yyyy,@DOB,@Date)
when month(@DOB)=month(@Date) then
case when day(@DOB)>day(@Date)
then datediff(yyyy,@DOB,@Date)-1
else datediff(yyyy,@DOB,@Date) end
end)
end