zoukankan      html  css  js  c++  java
  • SqlServer根据生日计算年龄,精确到年(岁)月日小时分秒

    根据生日获取年龄不仅仅是“多少岁”,还可能涉及到年龄不到“1岁”、不到“1月”、不到“1天”、不到“1小时”、不到“1分钟”的情况,整理如下脚本,做以笔记:

    DECLARE @BirthDate DATETIME
    DECLARE @CurrentDate DATETIME
    SET @BirthDate = '2014-04-29 12:59:00.000'
    SET @CurrentDate = '2014-04-29 13:10:23.000'
    
    DECLARE @DiffInYears INT
    DECLARE @DiffInMonths INT
    DECLARE @DiffInDays INT
    DECLARE @DiffInHours INT
    DECLARE @DiffInMinutes INT
    DECLARE @DiffInSeconds INT
    DECLARE @TotalSeconds BIGINT
    
    -- Determine Year, Month, and Day differences
    SET @DiffInYears = DATEDIFF(year, @BirthDate, @CurrentDate)
    IF @DiffInYears > 0
        SET @BirthDate = DATEADD(year, @DiffInYears, @BirthDate)
    IF @BirthDate > @CurrentDate
    BEGIN
        -- Adjust for pushing @BirthDate into future
        SET @DiffInYears = @DiffInYears - 1
        SET @BirthDate = DATEADD(year, -1, @BirthDate)
    END
    
    SET @DiffInMonths = DATEDIFF(month, @BirthDate, @CurrentDate)
    IF @DiffInMonths > 0
        SET @BirthDate = DATEADD(month, @DiffInMonths, @BirthDate)
    IF @BirthDate > @CurrentDate
    BEGIN
        -- Adjust for pushing @BirthDate into future
        SET @DiffInMonths = @DiffInMonths - 1
        SET @BirthDate = DATEADD(month, -1, @BirthDate)
    END
    
    SET @DiffInDays = DATEDIFF(day, @BirthDate, @CurrentDate)
    IF @DiffInDays > 0
        SET @BirthDate = DATEADD(day, @DiffInDays, @BirthDate)
    IF @BirthDate > @CurrentDate
    BEGIN
        -- Adjust for pushing @BirthDate into future
        SET @DiffInDays = @DiffInDays - 1
        SET @BirthDate = DATEADD(day, -1, @BirthDate)
    END
    
    -- Get number of seconds difference for Hour, Minute, Second differences
    SET @TotalSeconds = DATEDIFF(second, @BirthDate, @CurrentDate)
    
    -- Determine Seconds, Minutes, Hours differences
    SET @DiffInSeconds = @TotalSeconds % 60
    SET @TotalSeconds = @TotalSeconds / 60
    
    SET @DiffInMinutes = @TotalSeconds % 60
    SET @TotalSeconds = @TotalSeconds / 60
    
    SET @DiffInHours = @TotalSeconds
    
    -- Display results
     SELECT @DiffInYears AS YearsDiff,
            @DiffInMonths AS MonthsDiff,
            @DiffInDays AS DaysDiff,
            @DiffInHours AS HoursDiff,
            @DiffInMinutes AS MinutesDiff,
            @DiffInSeconds AS SecondsDiff 
  • 相关阅读:
    嵌入式开发-基础理论笔记
    如果有,说明你正在堕落!
    不愿意主动联系别人的6大理由
    WCF 服务的ABC之契约(七)
    WCF 服务的ABC之绑定(六)
    WCF 服务的ABC之地址(五)
    WCF 服务与终结点(四)
    WCF 配置文件(三)
    [转载][新手教程] 【小白教程】第一期:谁动了我的Grub?——Grub 修复
    [转载]反无人机企业DroneShield利用声音识别侦测无人机
  • 原文地址:https://www.cnblogs.com/seanyan/p/14293829.html
Copyright © 2011-2022 走看看