Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中计算年龄的函数_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

在SQL中计算年龄的函数

在SQL中计算年龄的函数,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我在寻找一种计算一个人年龄的方法。我正在为它制作一个函数,我可以稍后使用,这次也可以 函数应采用瑞典格式的11个字符的ID号,即560404-1234 并返回该人的年龄,即年数。到目前为止,我想用一个减法例子:getdateyear2014-19+IDNr datepartyy来得到总和 不过还是卡住了 干杯我猜瑞典的身份证号码格式是YYMMDD,后面跟着别的 如果是这样,则应通过以下方式获得日期: select cast('19'+left(idn, 6) as date) 那么年龄应该是:

我在寻找一种计算一个人年龄的方法。我正在为它制作一个函数,我可以稍后使用,这次也可以

函数应采用瑞典
格式的11个字符的ID号,即
560404-1234

并返回该人的年龄,即年数。到目前为止,我想用一个减法例子:
getdateyear2014-19+IDNr datepartyy
来得到总和

不过还是卡住了


干杯

我猜瑞典的身份证号码格式是YYMMDD,后面跟着别的

如果是这样,则应通过以下方式获得日期:

select cast('19'+left(idn, 6) as date)
那么年龄应该是:

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

瑞典人如何对待过去14年左右出生的人?100岁以上的人会怎么样?

我猜瑞典的身份证号码格式是YYMMDD,后面跟着其他的

如果是这样,则应通过以下方式获得日期:

select cast('19'+left(idn, 6) as date)
那么年龄应该是:

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

瑞典人如何对待过去14年左右出生的人?100岁以上的人会怎么样?

我猜瑞典的身份证号码格式是YYMMDD,后面跟着其他的

如果是这样,则应通过以下方式获得日期:

select cast('19'+left(idn, 6) as date)
那么年龄应该是:

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

瑞典人如何对待过去14年左右出生的人?100岁以上的人会怎么样?

我猜瑞典的身份证号码格式是YYMMDD,后面跟着其他的

如果是这样,则应通过以下方式获得日期:

select cast('19'+left(idn, 6) as date)
那么年龄应该是:

select datediff(year, cast('19'+left(idn, 6) as date), getdate())
瑞典人如何对待过去14年左右出生的人?如果“dean”是正确的,那么您可以尝试以下代码:

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 
如果“dean”是正确的,那么您可以尝试以下代码

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 
如果“dean”是正确的,那么您可以尝试以下代码

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 
如果“dean”是正确的,那么您可以尝试以下代码

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 

这是我的答案,与上面的答案相似,但这就是我在一段时间后解决这个问题的方法

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  

这是我的答案,与上面的答案相似,但这就是我在一段时间后解决这个问题的方法

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  

这是我的答案,与上面的答案相似,但这就是我在一段时间后解决这个问题的方法

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  

这是我的答案,与上面的答案相似,但这就是我在一段时间后解决这个问题的方法

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  

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

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

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

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

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

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

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

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

要将出生日期与@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 

要将出生日期与@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 

要将出生日期与@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 

要将出生日期与@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 


你能为我们这些不熟悉瑞典身份证号码的人解释一下瑞典身份证号码的格式吗?特定人的出生日期在哪里?是哪种格式?我想你可以自己从身份证号码中提取一个人的生日。关于年龄的实际计算,请看伊兹克的文章:你能为我们这些不熟悉瑞典身份证号码的人解释一下瑞典身份证号码的格式吗?特定人的出生日期在哪里?是哪种格式?我想你可以自己从身份证号码中提取一个人的生日。关于年龄的实际计算,请看伊兹克的文章:你能为我们这些不熟悉瑞典身份证号码的人解释一下瑞典身份证号码的格式吗?特定人的出生日期在哪里?是哪种格式?我想你可以自己从身份证号码中提取一个人的生日。关于年龄的实际计算,请看伊兹克的文章:你能为我们这些不熟悉瑞典身份证号码的人解释一下瑞典身份证号码的格式吗?特定人的出生日期在哪里?是哪种格式?我想你可以自己从身份证号码中提取一个人的生日。关于年龄的实际计算,请参阅伊兹克的文章:好问题。实际上,对于我们的业务,您必须至少年满18岁才能进入我们的系统,而且我们没有超过114岁的人:)瑞典SSN是建立在
YYMMDD-NNNX
格式上的,其中
NNN
是一个序列号,X是使用mod 10计算的校验和;对于100岁以上的人,破折号由加号代替。用于校验和的算法如下:我出生于1965年2月20日。2月19日我多大了,2月21日我多大了?这在某种程度上是可行的。我已经尝试过一点,但根据以下错误消息,转换失败。
Msg 241,级别16,状态1,从字符串转换日期和/或时间时,第1行转换失败。
此日期转换可在多种情况下工作:。你确定所有的字符串都是这种格式吗?好问题。实际上,对于我们的业务,您必须至少年满18岁才能进入我们的系统,而且我们没有超过114岁的人:)瑞典SSN是建立在
YYMMDD-NNNX
格式上的,其中
NNN
是一个序列号,X是使用mod 10计算的校验和;对于100岁以上的人,破折号由加号代替。用于校验和的算法如下:我出生于1965年2月20日。2月19日我多大了,2月21日我多大了?这在某种程度上是可行的。我试过一点,但转换a失败了