绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
SQL server 计算年龄明细问题
2023-03-20 15:18:22

提前说一下,有一个bug,就是出生日期等于getdate()的时候,由于没有到时分秒,而无法计算年龄。

过几天补上。


/*计算明细年龄问题*/

DECLARE @ADATE DATETIME, @BIRTHDAY DATETIME
 , @AYEAR INT,@AMONTH INT,@ADAY INT,@BDAY INT, @RVALUE VARCHAR(20)
SET @RVALUE = ''
SET @BIRTHDAY ='2019-06-21 10:00:00.000'
SET @ADATE = GETDATE()  
SET @ADAY = DATEDIFF(DAY, @BIRTHDAY, @ADATE) --当前日期与生日的日期

      IF @ADAY >   --即 出生日期大于当前日期,生日day>当前day
      BEGIN
        --当前日期与生日的月份差值
        SELECT @AMONTH = DATEDIFF(MONTH, @BIRTHDAY, @ADATE),
        --DATEPART 用于返回日期的单独部分,当前日期的日减去生日的日,赋值给@BDAY
         @BDAY = DATEPART(DAY, @ADATE) - DATEPART(DAY, @BIRTHDAY)
        
        SET @AYEAR = @AMONTH / 12  --年=总月份/12
        SET @AMONTH = @AMONTH % 12 --总月份除以12取余
   --如果当前日减去生日的日小于0 ,将总月份除以12的余数减一
        IF @BDAY <  SET @AMONTH = @AMONTH - 1 
        
   --如果上一个条件成立,且当@AMONTH=0 时,@AMONTH = @AMONTH - 1<0 ,条件成立,年龄=@AYEAR-1,月份=@AMONTH=12+@AMONTH
        IF @AMONTH <  SELECT @AYEAR = @AYEAR - 1, @AMONTH = 12 + @AMONTH 
      
        IF @BDAY < 
        BEGIN
          SET @BIRTHDAY = DATEADD(MONTH, @AMONTH, @BIRTHDAY)
        
          SET @BIRTHDAY = DATEADD(YEAR, @AYEAR, @BIRTHDAY)
          
          SET @BDAY = DATEDIFF(DAY, @BIRTHDAY, @ADATE)
          
        END
      SET @RVALUE=CAST(@AYEAR AS VARCHAR)+'岁'+CAST(@AMONTH  AS VARCHAR)+'月'+CAST(@BDAY  AS VARCHAR)+'日'
      SELECT @RVALUE

     END 

     

在后边加上这句,即可实现到分

 else
      if @aDay = 0
      begin
        set @amin = datediff(minute, @BIRTHDAY, @aDate)
        if @amin > 0
        begin
          set @ahour = @amin / 60
          set @amin =@amin % 60
          if @ahour = 0 set @rvalue = convert(varchar(9), @amin) + '分'
          else
            if @ahour > 0 set @rvalue = convert(varchar(9), @ahour) + '时'+convert(varchar(9), @amin) + '分'
        end
        SELECT @RVALUE
      end

分享好友

分享这个小栈给你的朋友们,一起进步吧。

SQLServer
创建时间:2023-03-20 14:06:14
美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~