我有一個關于根據他們的出生日期尋找生日的問題,遺憾的是我在這個網站上沒有找到答案。
我想在離他們的生日還有X天的時候,為每個日期設定一個數字。但我很難使用他們的DOB和Dateiff。
我想要什么:
我想要什么?
John: 0 --今天他的生日。
埃里克:0
Ben:1 --在本周。
杰里:1
朱爾斯。2 -- 本月
湯姆: 3 -- 所有其他日期
我試著用DATEDIFF與format一起使用,但問題是你不能用DATEDIFF的格式。
我試著不使用,這回傳了他們的出生日期。
這是一個代碼。
這是我嘗試的代碼:
這是我嘗試的代碼。
SELECT *
from
(SELECT)
[id],
[fullname] = CONCAT(E. [name],
(CASE)
WHEN LEN(E.[介詞]) >/span> 0
THEN ' ' E. [preposition]
END)。)
', ', E.[givenname])。)
[relationnumber],
[day] = (CASE)
WHEN DATEDIFF(day, [date] , '2021-09-09') < 1
THEN 0
WHEN DATEDIFF(day, [date], '2021-09-09') < 8.
THEN 1
WHEN DATEDIFF(day, [date], '2021-09-09') < 31.
THEN 2
ELSE 3
END)。)
[生日]
FROM)
[info].[member] E
WHERE
[system_active] = 1) A
ORDER BY
日 ASC
注意:我從URL中得到的設定日期 "2021-09-09"
提前感謝
編輯 我的(作業)解決方案SELECT *
FROM (
SELECT [id]
,[全名] = CONCAT(E. [name], (CASE WHEN LEN(E. [preposition])) [介詞])>0 THEN ' '/span> E. [介詞] END), ', ', E. [givenname])
,[relationnumber]
,hi = DATEADD(year, DATEDIFF(year, [birthday], CAST('2021-09-09' as date) , [生日])
,[day] =)
(
CASE>
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date) , [生日])) = 0 THEN 0 >。
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date) , [生日])) BETWEEN 1 AND 7 THEN 1
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date) , [生日])) BETWEEN 8 AND 31 THEN 2
ELSE 3
END
)
,[生日]
FROM [info].[member] E
WHERE [system_active] = 1
) A
ORDER BY day ASC
要想得到更好的答案,請看MatBailie的答案。這個解決方案對我來說剛剛好
uj5u.com熱心網友回復:
DATEDIFF()的一個特點是,差值為0意味著值是在同一個日/周/月/年。
這意味著,去年的任何日期與今年的任何其他日期總是相差1年。
這意味著去年的任何日期總是與今年的任何其他日期相差1年。
DATEDIFF(year, '2020-01-01', '2021-09-09') == 1DATEDIFF(year, '2020-12-31', '2021-09-09') == 1它不是在計算日期之間的整數年。 它只計算年份部分的差異。
這意味著什么?
這意味著我遵循以下程序......
計算他們的下一個生日。
算出他們的下一個生日......
- 計算出這個人今年的生日 如果那是在今天的日期之前,再加一年。
- 哪一個是他們的下一個生日(把今天的生日當作他們的下一個生日) 。
與固定日期相比...
- 他們的下一個生日是今天嗎?
- 他們的下一個生日是今天嗎?
- 他們的下一個生日是在今天 7天之前嗎?
- 他們的下一個生日是在今天 1個月之前嗎?
我是這樣做的...... (修改后,使其更容易為所有計算中的相對日期設定引數)
SELECT
member.*,
next.birthday AS next_birthday,
CASE WHEN next.birthday = today.date THEN 0
WHEN next.birthday <= DATEADD(DAY, 7, today. date) THEN 1.
WHEN next.birthday <= DATEADD(MONTH, 1, today. date) THEN 2.
ELSE 3
END
AS next_birthday_type
FROM FROM_type
成員
CROSS APPLY
(
SELECT CAST('2021-09-09' As DATE)
)
today(date)
CROSS APPLY
(
SELECT DATEADD(年, DATEDIFF(年, member.birthday, today.date), member.birthday)
)
AS this_year(birthday)
CROSS APPLY
(
SELECT CASE WHEN this_year.birthday </span> today.date
THEN DATEADD(year, 1, this_year.birthday)
ELSE this_year.birthday.
結束。
)
AS next(birthday)
Demos : https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=df444333bab146d4d923b210e813e852
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311087.html
標籤:
下一篇:驗證表單不起作用-表單和驗證
