从出生日期开始的年,月和日

时间:2017-07-18 15:18:10

标签: tsql

我需要从年龄表中的出生日期列起的年,月和日。 你能帮我提取数据吗?

附加样本文件以供参考。

enter image description here

2 个答案:

答案 0 :(得分:1)

更新版本:

DECLARE @today DATETIME;
SET @today = GETDATE();
DECLARE @dates TABLE ( DOB DATETIME );
INSERT  INTO @dates
VALUES  ( '2016-11-02' ),
        ( '2015-03-26' ),
        ( '2010-11-20' ),
        ( '2017-06-17' );
SELECT  DOB ,
        DATEDIFF(YEAR, DOB, @today) AS [Age] ,
        DATEDIFF(YEAR, DOB, @today)
        - CASE WHEN MONTH(DOB) > MONTH(@today)
                    OR MONTH(DOB) = MONTH(@today)
                    AND DAY(DOB) > DAY(@today) THEN 1
               ELSE 0
          END AS Years ,
        DATEDIFF(MONTH,
                 DATEADD(YEAR,
                         DATEDIFF(YEAR, DOB, @today)
                         - CASE WHEN MONTH(DOB) > MONTH(@today)
                                     OR MONTH(DOB) = MONTH(@today)
                                     AND DAY(DOB) > DAY(@today) THEN 1
                                ELSE 0
                           END, DOB), @today)
        - CASE WHEN DAY(DOB) > DAY(@today) THEN 1
               ELSE 0
          END AS Months ,
        DATEDIFF(DAY,
                 DATEADD(MONTH,
                         DATEDIFF(MONTH,
                                  DATEADD(YEAR,
                                          DATEDIFF(YEAR, DOB, @today)
                                          - CASE WHEN MONTH(DOB) > MONTH(@today)
                                                      OR MONTH(DOB) = MONTH(@today)
                                                      AND DAY(DOB) > DAY(@today)
                                                 THEN 1
                                                 ELSE 0
                                            END, DOB), @today)
                         - CASE WHEN DAY(DOB) > DAY(@today) THEN 1
                                ELSE 0
                           END,
                         DATEADD(YEAR,
                                 DATEDIFF(YEAR, DOB, @today)
                                 - CASE WHEN MONTH(DOB) > MONTH(@today)
                                             OR MONTH(DOB) = MONTH(@today)
                                             AND DAY(DOB) > DAY(@today) THEN 1
                                        ELSE 0
                                   END, DOB)), @today) AS Days
FROM    @dates;

enter image description here

答案 1 :(得分:0)

感谢大家的回复。我找到了答案。

   create table Test_table
(
 Date_Of_Birth datetime,
 received_Date datetime,
)

insert into Test_table values
('2016-11-02 00:00:00','2017-7-15 00:00:00'),
('2015-7-17 00:00:00','2017-7-13 00:00:00'),
('2015-3-26 00:00:00','2017-7-3 00:00:00')
GO

;with cte_years as
(
select case when 
DATEADD(year,DATEDIFF(Year,Date_Of_Birth,received_Date),Date_Of_Birth)> 
received_Date then  DATEDIFF(Year,Date_Of_Birth,received_Date)-1
    else  DATEDIFF(Year,Date_Of_Birth,received_Date) end as Years,
Date_Of_Birth,
received_Date
from Test_Table
),
cte_months as
(
select 
Years,
case when 
   DATEADD(month,DATEDIFF(month,Date_Of_Birth,received_Date),Date_Of_Birth)> 
    received_Date 
    then  DATEDIFF(month,Date_Of_Birth,received_Date)-1-Years*12
    else  DATEDIFF(month,Date_Of_Birth,received_Date)-Years*12 end as 
Months,Date_Of_Birth,received_Date
from cte_years
)
select Date_Of_Birth,received_Date,cast(Years as varchar)+' Years 
'+cast(Months as varchar)+' Months 
'+cast(datediff(day,dateadd(month,12*Years+Months,Date_Of_Birth), 
received_Date) as varchar)+' Days ' as Age from cte_months
相关问题