在SQL中计算年龄的函数

时间:2014-04-02 07:12:26

标签: sql sql-server sql-server-2008 tsql

我正在寻找一种计算一个人年龄的方法。我正在为它制作一个功能,我可以在以后和以后使用。

函数应采用sweden格式为560404-1234的11个字符的ID号。Getdate year 2014 - 19+IDNr datepart yy

并且只返回这个年龄的人的年龄。到目前为止,我已经想过用例子{{1}}进行减法来得到总和。

虽然仍然坚持。

干杯

5 个答案:

答案 0 :(得分:3)

我猜我的瑞典身份证号码格式是YYMMDD,后跟别的东西。

如果是这样,那么以下内容应该可以获得日期:

select cast('19'+left(idn, 6) as date)

然后年龄将是:

select datediff(year, cast('19'+left(idn, 6) as date), getdate())

瑞典人对过去14年左右出生的人做了什么?那些超过100岁的人会怎么样?

答案 1 :(得分:0)

如果“院长”是正确的,那么您可以尝试以下代码,

Create FUNCTION [dbo].[udfn_Get_Age_In_Years]
(
    @ID_Number varchar(50)
)
Returns int 
--select dbo.[udfn_Get_Age_In_Years]('560404-1234')
as
begin
    Declare @retVal int = 0
    select @retVal = Datediff(mm,col_dob,GETDATE()) / 12 from myTable 
    where ID_Number = @ID_Number
    Return @retVal
end 

答案 2 :(得分:0)

这是我的答案,它类似于上面的那些,但这是我在一段时间后解决它的方式。

ALTER function [dbo].[Function_AGE] 
(
    @IdNr varchar(13)

) 
returns int
as

begin



    Declare @Calc int 

    Set @IdNr = (Select Case when LEN(@IdNr) > 11 
    then cast(left(@IdNr, 8) as date)
    else cast('19'+left(@IdNr,6) as date) end) 


    set @Calc = (select datediff(year,@IdNr,getdate())) 

    Return @Calc
end  

答案 3 :(得分:0)

以下是根据年龄和当前日期计算一个人年龄的方法

select case 
            when cast(getdate() as date) = cast(dateadd(year, (datediff(year, '1996-09-09', getdate())), '1996-09-09') as date)
                then dateDiff(yyyy,'1996-09-09',dateadd(year, 0, getdate()))
            else dateDiff(yyyy,'1996-09-09',dateadd(year, -1, getdate()))
        end as MemberAge
go

答案 4 :(得分:0)

要将生日与@Date进行比较,DATEDIFF会让您关闭。如果当年没有发生月份和日期,则减去该数据。

CASE WHEN DATEPART(mm,birthdate) > DATEPART(mm,@Date) 
THEN DATEDIFF(YEAR, birthdate AS DATE), @Date) - 1 

WHEN DATEPART(mm,birthdate) = DATEPART(mm,@Date) 
AND  DATEPART(dd,birthdate) > DATEPART(dd,@Date) 
THEN DATEDIFF(YEAR, birthdate AS DATE), @Date) - 1

ELSE DATEDIFF(YEAR, CAST(birthdate AS DATE), @Date)
END AS Age