求一存储过程。根据出生年月日得出年龄,要求精确到岁,月,日

hanker1314520 2007-01-15 02:23:49
1981-01-01 得到 26岁
2006-12-01 得到 1月
2007-01-01 得到 14天
要求返回年龄和年龄单位 ,26岁,1月,14天
寻求最简单的写法
...全文
501 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcbgyjs 2007-01-15
  • 打赏
  • 举报
回复
上一个没考虑年的特殊情况。
--------------------------------
declare @dt datetime, @year int, @month int
set @dt='1981-12-01'

select @year = datediff(year, @dt, getdate()), @month = datediff(month, @dt, getdate())

if(@year > 1)
begin
if(dateadd(year, @year, @dt)>getdate())
begin
set @year = @year - 1
end

select cast(@year as varchar(10))+'岁'
end else
if(@year > 0 and dateadd(year, @year, @dt)<=getdate())
begin
select cast(@year as varchar(10))+'岁'
end else
begin
if(@month > 1)
begin
if(dateadd(month, @month, @dt)>getdate())
begin
set @month = @month - 1
end

select cast(@month as varchar(10))+'月'
end else
if(@month > 0 and dateadd(month, @month, @dt)<=getdate())
begin
select cast(@month as varchar(10))+'月'
end else
begin
select cast(datediff(day, @dt, getdate()) as varchar(10))+'天'
end
end
wcbgyjs 2007-01-15
  • 打赏
  • 举报
回复
declare @dt datetime, @year int, @month int
set @dt='1981-01-01'

select @year = datediff(year, @dt, getdate()), @month = datediff(month, @dt, getdate())

if(@year > 0 and dateadd(year, @year, @dt)<=getdate())
begin
select cast(@year as varchar(10))+'岁'
end else
begin
if(@month > 1)
begin
if(dateadd(month, @month, @dt)>getdate())
begin
set @month = @month - 1
end

select cast(@month as varchar(10))+'月'
end else
if(@month > 0 and dateadd(month, @month, @dt)<=getdate())
begin
select cast(@month as varchar(10))+'月'
end else
begin
select cast(datediff(day, @dt, getdate()) as varchar(10))+'天'
end
end
achongsky 2007-01-15
  • 打赏
  • 举报
回复
还是不对~
----
declare @dt datetime
set @dt='1981-08-20'
select
(
datediff(year, @dt, getdate())-
case when dateadd(year, datediff(year, @dt, getdate()), @dt)>getdate()
then 1 else 0 end
) as 年龄,
abs( datediff(month, dateadd( year, datediff(year, @dt, getdate()), @dt ), getdate()) ) as 月,
abs( datediff(day, dateadd(month, datediff(month, @dt, getdate()), @dt), getdate()) ) as 天

----
25 7 5
leo_lesley 2007-01-15
  • 打赏
  • 举报
回复
select cast(DATEDIFF( year ,@start_day,getdate()) as varchar(10)) + '年'
select cast(DATEDIFF( month , '2006-12-01',getdate()) as varchar(10)) + '月'
select cast(DATEDIFF( day , '2007-01-01', getdate()) as varchar(10)) + '日'
achongsky 2007-01-15
  • 打赏
  • 举报
回复
declare @dt datetime
set @dt='1981-08-20'
select
(
datediff(year, @dt, getdate())-
case when dateadd(year, datediff(year, @dt, getdate()), @dt)>getdate()
then 1 else 0 end
) as 年龄,
datediff(month, dateadd( year, datediff(year, @dt, getdate()), @dt ), getdate()) as 月,
datediff(day, dateadd(month, datediff(month, @dt, getdate()), @dt), getdate()) as 天

--------

25 -7 -5
marco08 2007-01-15
  • 打赏
  • 举报
回复

declare @dt datetime
set @dt='1981-01-01'
select
(
datediff(year, @dt, getdate())-
case when dateadd(year, datediff(year, @dt, getdate()), @dt)>getdate()
then 1 else 0 end
) as 年龄,
abs( datediff(month, dateadd( year, datediff(year, @dt, getdate()), @dt ), getdate()) ) as 月,
abs( datediff(day, dateadd(month, datediff(month, @dt, getdate()), @dt), getdate()) ) as 天
marco08 2007-01-15
  • 打赏
  • 举报
回复
declare @dt datetime
set @dt='1981-01-01'
select
(
datediff(year, @dt, getdate())-
case when dateadd(year, datediff(year, @dt, getdate()), @dt)>getdate()
then 1 else 0 end
) as 年龄,
datediff(month, dateadd( year, datediff(year, @dt, getdate()), @dt ), getdate()) as 月,
datediff(day, dateadd(month, datediff(month, @dt, getdate()), @dt), getdate()) as 天

--result
年龄 月 天
----------- ----------- -----------
26 0 14

(1 row(s) affected)
hanker1314520 2007-01-15
  • 打赏
  • 举报
回复
UP!!!!!!
内容概要:本文档详细介绍了时间差计算模块程序的设计及其程序注解,涵盖从标签建立到输出控制的全过程。首先阐述了标签变量的定义,包括开始、结束时间的时分秒,确保输入输出标签明确并选择合适的数据类型。接着深入探讨了逻辑算法控制程序,重点讲解了开始和结束时间以秒为单位的存储方式,以及复杂的年份计算逻辑,考虑到了份、天数、小时、分钟和秒钟对年份计算的影响。此外,还展示了如何将时间差换算为时分秒的具体方法,通过一系列的数学运算(如除法)得出各时间单位,并详细描述了输出控制程序,确保计算结果能正确地输出到外部标签。 适合人群:有一定编程基础,尤其是对PLC编程和时间逻辑处理感兴趣的工程师或技术人员。 使用场景及目标:①用于工业自动化控制系统中,精确计算两个时间点之间的差异;②帮助工程师理解时间差计算的逻辑流程和具体实现步骤,提高编程技能;③为开发类似的时间处理功能提供参考模板。 阅读建议:此文档不仅提供了详细的代码实现,更侧重于逻辑算法的设计思路,建议读者在学习过程中结合实际应用场景进行思考,并动手实践相关代码逻辑。

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧