我正在寻找一种计算一个人年龄的方法。我正在为它制作一个功能,我可以在以后和以后使用。
函数应采用sweden
格式为560404-1234
的11个字符的ID号。Getdate year 2014 - 19+IDNr datepart yy
。
并且只返回这个年龄的人的年龄。到目前为止,我已经想过用例子{{1}}进行减法来得到总和。
虽然仍然坚持。
干杯
答案 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