-1
A
回答
0
感謝大家的response.I找到了答案,雖然。
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
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;
相關問題
- 1. 從日,月和年生成NSDate
- 2. 獲取出生日期的邏輯從年齡表示出生日期月和日
- 3. 從年,月和日創建日期
- 4. 如何從出生日期獲得年月日
- 5. 計算日期之間的年/月/日
- 6. 生成兩個日期之間的年,月和日的平面日曆佈局
- 7. 與日,月和年
- 8. 從出生之日起的MySQL年齡 - TIMESTAMPDIFF()
- 9. 如何在'2015年12月30日'和'2015年12月30日'之間選擇*從MYTABLE的日期(MYDATE);在JOOQ
- 10. 生成日期基於月和年列
- 11. 摸出年:月:日離開
- 12. 查詢月,日和年中的日期
- 13. CJuiDatePicker年/年/月/年 - 月 - 日的選擇
- 14. 如何從日期格式爲日 - 月 - 年的日期找出月份?
- 15. 從日曆表中提取日,月和年
- 16. 獲得年月日,年齡日期和日期之間現在用PHP
- 17. 從月,日,年創建NSDate
- 18. 打印年月日列表
- 19. javascript從年,月,日創建日期
- 20. 獲得從int(年月日)日期
- 21. 從日期到日期(僅年/月)
- 22. 甲骨文日,月和年
- 23. 需要年月日和天
- 24. 正則表達式從年 - 月 - 日 - title.ext
- 25. 爲什麼從1970年1月1日起計算日期?
- 26. 從2013年6月1日起打印日期
- 27. 按日/月/年/日/月/日/年等搜索SQL查詢
- 28. 提取月從Julian日和年python
- 29. 日期選擇日月年
- 30. 總和的兩個日期之間的年齡在年月日格式
天應該是16,22和28.試試'2017-06-17'。應該是1個月1天1個月0天 –
提示:'GetDate()'有點鬼鬼祟祟。您所做的八個調用中的每一個都可能返回不同的值,但每個實例的值將應用於所有行。而不是在午夜左右出現競爭狀況,最好是一次獲得該值,例如, '將@Today聲明爲Date = GetDate();',然後在整個過程中使用該值。 – HABO
是的。比較兩個日期時,我得到的數據略有不同。 – Chickoo