-1
A
答えて
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
1
更新バージョン:response.Iため
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. 生年月日ウィザードプログラム
- 2. 生年月日:すべての地元で同じ生年月日ですか?
- 3. 生年月日を表す
- 4. ドッグイヤー生年月日クエリ
- 5. 生年月日入力マスク
- 6. 生年月日を確認
- 7. wordpress meta_query生年月日と誕生日
- 8. 日、月、年からNSDateを生成
- 9. meteorjsから生年月日に変換
- 10. 年月日から年月を数えてください
- 11. 日付ピッカー - 月/年
- 12. javascript作成日年月日
- 13. ルビーのTime.new(年、月、日)とTime.local(年、月、日)の差
- 14. Bigqueryの完全な日付(年月日)〜(年月)
- 15. 年/月/日を年月日に変更する
- 16. 生年月日を取得するロジック年齢から年月日を表現します
- 17. sqlチェック制約の生年月日からの年齢
- 18. SASは年齢から生年月日を見つけます
- 19. 生年月日からの年数を計算する
- 20. Excelのスプレッドシートの生年月日から年齢を検索
- 21. 年齢から生年月日を計算する
- 22. パンダ日時スライシング:junkdf.ix [ '2015年8月3日' '2015年8月6日']
- 23. ラテックス日付日時計算月日年
- 24. 誕生日を日、月、年のドロップダウンリストから挿入します
- 25. SQLからの解析年月日
- 26. 生年月日登録ページ、Eclipse
- 27. 生年月日のCHECK制約?
- 28. Rubyの年月日は?
- 29. レール/(年)/(月)/(日)別ページ
- 30. Nullableでの年月日
日数は16,22、および28にする必要があります。「2017-06-17」と試してください。 1月1日ではない1月0日 –
ヒント: 'GetDate()'はやや卑劣です。 8つの呼び出しのそれぞれが異なる値を返すかもしれませんが、各インスタンスの値はすべての行に適用されます。真夜中頃に競合状態になるのではなく、値を一度取得する方がよいでしょう。 '@TodayをDate = GetDate();と宣言し、その値を一貫して使用します。 – HABO
はい。私は2つの日付を比較しながら、わずかに異なるデータを取得しています。 – Chickoo