r*****8 发帖数: 104 | 1 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当
场写CODE.其中一题是:
Write a SQL Function, input data is date of birth then Function should
return a integer current Age.
这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/
2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是
你20 岁生日,那今天1/22/2020你是20 岁还是21 岁?
这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司
要SQL Function? |
T*******x 发帖数: 8565 | 2 sql server有datediff函数,先把这个写出来就差不多了。
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
r*****8 发帖数: 104 | 3 DateDiff only for start 后面还差很多,可以很简单,也可以很复杂
【在 T*******x 的大作中提到】 : sql server有datediff函数,先把这个写出来就差不多了。
|
T*******x 发帖数: 8565 | 4 说清楚要求就能做。
【在 r*****8 的大作中提到】 : DateDiff only for start 后面还差很多,可以很简单,也可以很复杂
|
R*****g 发帖数: 33 | 5 Current year - birth year
Expected error is half year. That is it.
: 说清楚要求就能做。
【在 T*******x 的大作中提到】 : 说清楚要求就能做。
|
x********9 发帖数: 22 | 6 简单回复下MySQL解决方案。period_diff返回当前日期和生日之间的月数之差,除以12
变成年,求floor留整即可。当前月是否是出生月,如果是,比较当前日期是否小于出
生之日,如果是就是说未到当前整数年龄,减一即可。以下是SQL实现,function的话
放进function定义,return @age即可。
MySQL:
/*
set @birthday:='2001-01-25'; -- '2001-01-24'
select @age:=floor(period_diff(date_format(current_date,'%Y%m'),date_format(
@birthday,'%Y%m'))/12);
select @age:[email protected] from dual where month(current_date)=month(@birthday) and
day(current_date)
select @age;
*/ |
r*****8 发帖数: 104 | 7 我想你的思路是对的,有一个减1 还是减0 的问题我都没想清楚。
12
format(
and
【在 x********9 的大作中提到】 : 简单回复下MySQL解决方案。period_diff返回当前日期和生日之间的月数之差,除以12 : 变成年,求floor留整即可。当前月是否是出生月,如果是,比较当前日期是否小于出 : 生之日,如果是就是说未到当前整数年龄,减一即可。以下是SQL实现,function的话 : 放进function定义,return @age即可。 : MySQL: : /* : set @birthday:='2001-01-25'; -- '2001-01-24' : select @age:=floor(period_diff(date_format(current_date,'%Y%m'),date_format( : @birthday,'%Y%m'))/12); : select @age:[email protected] from dual where month(current_date)=month(@birthday) and
|
y*******8 发帖数: 100 | 8 TSql:
Create Function Get_Age (@Birth Date)
RETURNS INT
As
BEGIN
Declare @Age INT
Set @Age = DateDiff(yyyy,@Birth, GetDate() -
IIF(Month(GetDate())
IIF(Month(GetDate())=Month(@Birth) And
Day(GetDate())
RETURN @Age
END |
a***a 发帖数: 2493 | 9
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
a***a 发帖数: 2493 | 10 请问你应聘的这个职位pay range是多少?
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
|
|
r*****8 发帖数: 104 | 11 这个可能比较清楚:
CREATE FUNCTION [dbo].[udfGetAge](@DateOfBirth DATETIME)
RETURNS SMALLINT
AS
BEGIN
DECLARE @Age SMALLINT
SET @Age =(DATEDIFF(YY, @DateOfBirth, GETDATE())-
(CASE
WHEN GETDATE() >= DATEADD(YY, DATEDIFF(YY, @DateOfBirth, GETDATE()), @
DateOfBirth) THEN 0
ELSE 1
END))
RETURN @Age
END; |
d******a 发帖数: 32122 | 12 那还不如(today()-dob)/365
【在 R*****g 的大作中提到】 : Current year - birth year : Expected error is half year. That is it. : : : 说清楚要求就能做。 :
|
k**0 发帖数: 19737 | 13 这我以前写过,
第一种最直接也是最笨的方法,拆开DOB为年月日,分开比较。
第二种方法,聪明一点先比较年份,然后cast DOB 月日 + 今年年份 -》 比较今天的
日期。 这个方法要注意2/29号这个特殊日子, 分开对待。
两种方法都可以精确到具体日期。
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
r*****n 发帖数: 1285 | 14 如果一个人出生于2月29日,第二年2月28日他满周岁了吗? |
r*****8 发帖数: 104 | 15 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当
场写CODE.其中一题是:
Write a SQL Function, input data is date of birth then Function should
return a integer current Age.
这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/
2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是
你20 岁生日,那今天1/22/2020你是20 岁还是21 岁?
这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司
要SQL Function? |
T*******x 发帖数: 8565 | 16 sql server有datediff函数,先把这个写出来就差不多了。
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
r*****8 发帖数: 104 | 17 DateDiff only for start 后面还差很多,可以很简单,也可以很复杂
【在 T*******x 的大作中提到】 : sql server有datediff函数,先把这个写出来就差不多了。
|
T*******x 发帖数: 8565 | 18 说清楚要求就能做。
【在 r*****8 的大作中提到】 : DateDiff only for start 后面还差很多,可以很简单,也可以很复杂
|
R*****g 发帖数: 33 | 19 Current year - birth year
Expected error is half year. That is it.
: 说清楚要求就能做。
【在 T*******x 的大作中提到】 : 说清楚要求就能做。
|
x********9 发帖数: 22 | 20 简单回复下MySQL解决方案。period_diff返回当前日期和生日之间的月数之差,除以12
变成年,求floor留整即可。当前月是否是出生月,如果是,比较当前日期是否小于出
生之日,如果是就是说未到当前整数年龄,减一即可。以下是SQL实现,function的话
放进function定义,return @age即可。
MySQL:
/*
set @birthday:='2001-01-25'; -- '2001-01-24'
select @age:=floor(period_diff(date_format(current_date,'%Y%m'),date_format(
@birthday,'%Y%m'))/12);
select @age:[email protected] from dual where month(current_date)=month(@birthday) and
day(current_date)
select @age;
*/ |
|
|
r*****8 发帖数: 104 | 21 我想你的思路是对的,有一个减1 还是减0 的问题我都没想清楚。
12
format(
and
【在 x********9 的大作中提到】 : 简单回复下MySQL解决方案。period_diff返回当前日期和生日之间的月数之差,除以12 : 变成年,求floor留整即可。当前月是否是出生月,如果是,比较当前日期是否小于出 : 生之日,如果是就是说未到当前整数年龄,减一即可。以下是SQL实现,function的话 : 放进function定义,return @age即可。 : MySQL: : /* : set @birthday:='2001-01-25'; -- '2001-01-24' : select @age:=floor(period_diff(date_format(current_date,'%Y%m'),date_format( : @birthday,'%Y%m'))/12); : select @age:[email protected] from dual where month(current_date)=month(@birthday) and
|
y*******8 发帖数: 100 | 22 TSql:
Create Function Get_Age (@Birth Date)
RETURNS INT
As
BEGIN
Declare @Age INT
Set @Age = DateDiff(yyyy,@Birth, GetDate() -
IIF(Month(GetDate())
IIF(Month(GetDate())=Month(@Birth) And
Day(GetDate())
RETURN @Age
END |
a***a 发帖数: 2493 | 23
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
a***a 发帖数: 2493 | 24 请问你应聘的这个职位pay range是多少?
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
r*****8 发帖数: 104 | 25 这个可能比较清楚:
CREATE FUNCTION [dbo].[udfGetAge](@DateOfBirth DATETIME)
RETURNS SMALLINT
AS
BEGIN
DECLARE @Age SMALLINT
SET @Age =(DATEDIFF(YY, @DateOfBirth, GETDATE())-
(CASE
WHEN GETDATE() >= DATEADD(YY, DATEDIFF(YY, @DateOfBirth, GETDATE()), @
DateOfBirth) THEN 0
ELSE 1
END))
RETURN @Age
END; |
d******a 发帖数: 32122 | 26 那还不如(today()-dob)/365
【在 R*****g 的大作中提到】 : Current year - birth year : Expected error is half year. That is it. : : : 说清楚要求就能做。 :
|
k**0 发帖数: 19737 | 27 这我以前写过,
第一种最直接也是最笨的方法,拆开DOB为年月日,分开比较。
第二种方法,聪明一点先比较年份,然后cast DOB 月日 + 今年年份 -》 比较今天的
日期。 这个方法要注意2/29号这个特殊日子, 分开对待。
两种方法都可以精确到具体日期。
【在 r*****8 的大作中提到】 : 昨天去一保险公司面试DA,被3个SQL DEVELOPERDBA 围剿,问一大堆技术问题,还要当 : 场写CODE.其中一题是: : Write a SQL Function, input data is date of birth then Function should : return a integer current Age. : 这题看似简单,但算的方法和公式有多种,算出结果也不一样,比如,如果你3/01/ : 2020 是你的20岁生日,那么今天1/22/2020 你是19 岁还是20 岁? 如果12/1/2019 是 : 你20 岁生日,那今天1/22/2020你是20 岁还是21 岁? : 这是保险公司精算师通常要写的Issue Age 公式,看看那位大神能写出最正确保险公司 : 要SQL Function?
|
r*****n 发帖数: 1285 | 28 如果一个人出生于2月29日,第二年2月28日他满周岁了吗? |