由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - SQL OnSite 试题one
相关主题
Help on SQL statementSQL Server 2000: 计算时间差怎样精确到小时
select 跟 set 的区别?请问sql server里面怎么输出变量到文本文件?
SQL Server - convert datetime to a string YY-MM-DD HHSQL Server 如何把日期自动加入文件名中?
求教个MS SQL的问题How to write this loop SQL query?
考题:SSIS比较文件日期和LOADDATE请帮忙读懂这个sql script
这个stored proc错在哪里?各位各位,江湖救急 -- 数据被删
再请教大牛一个问题SSIS: execute SQL task failed on Insert statements
date format转换问题请教急问: 问一个SQL的问题 在线等!
相关话题的讨论汇总
话题: age话题: getdate话题: birth话题: function话题: sql
进入Database版参与讨论
1 (共1页)
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?

相关主题
再请教大牛一个问题请问sql server里面怎么输出变量到文本文件?
date format转换问题请教SQL Server 如何把日期自动加入文件名中?
SQL Server 2000: 计算时间差怎样精确到小时How to write this loop SQL query?
进入Database版参与讨论
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;
*/
相关主题
请帮忙读懂这个sql script急问: 问一个SQL的问题 在线等!
各位各位,江湖救急 -- 数据被删Does T-SQL have bit shift function?
SSIS: execute SQL task failed on Insert statements测一下你的t-sql 功力
进入Database版参与讨论
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日他满周岁了吗?
1 (共1页)
进入Database版参与讨论
相关主题
Does T-SQL have bit shift function?考题:SSIS比较文件日期和LOADDATE
测一下你的t-sql 功力这个stored proc错在哪里?
怎么样提高SQL SERVER的编程水平?再请教大牛一个问题
SQL Server DBA vs BI & DWdate format转换问题请教
Help on SQL statementSQL Server 2000: 计算时间差怎样精确到小时
select 跟 set 的区别?请问sql server里面怎么输出变量到文本文件?
SQL Server - convert datetime to a string YY-MM-DD HHSQL Server 如何把日期自动加入文件名中?
求教个MS SQL的问题How to write this loop SQL query?
相关话题的讨论汇总
话题: age话题: getdate话题: birth话题: function话题: sql