在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失败了