【发布时间】:2021-11-05 22:31:39
【问题描述】:
我有一个关于根据出生日期查找生日的问题,遗憾的是我在这个网站上没有找到答案。
我希望为距离他们生日还有 X 天的日期设置一个数字。除了我很难使用他们的 DOB 和 datediff。
我想要什么:
John: 0 --Today his birthday
Eric:0
Ben:1 -- In this week
Jerry:1
Jules: 2 -- In this month
Tom: 3 -- all other dates
我曾尝试将DATEDIFF 与格式一起使用,但问题是您不能将格式与DATEDIFF 一起使用。
我试过没有,这返回了他们的出生日期。
这是我试过的代码:
SELECT *
FROM
(SELECT
[id],
[fullname] = CONCAT(E.[name],
(CASE
WHEN LEN(E.[preposition]) > 0
THEN ' ' + E.[preposition]
END),
', ', E.[givenname]),
[relationnumber],
[day] = (CASE
WHEN DATEDIFF(day, [birthday], '2021-09-09') < 1
THEN 0
WHEN DATEDIFF(day, [birthday], '2021-09-09') < 8
THEN 1
WHEN DATEDIFF(day, [birthday], '2021-09-09') < 31
THEN 2
ELSE 3
END),
[birthday]
FROM
[info].[member] E
WHERE
[system_active] = 1) A
ORDER BY
day ASC
注意:我从 URL 得到的设置日期 '2021-09-09'
提前致谢
编辑 我的(工作)解决方案
SELECT *
FROM (
SELECT [id]
,[fullname] = CONCAT(E.[name], (CASE WHEN LEN(E.[preposition])>0 THEN ' '+E.[preposition] END), ', ', E.[givenname])
,[relationnumber]
,hi = DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date)) , [birthday])
,[day] =
(
CASE
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date)) , [birthday])) = 0 THEN 0
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date)) , [birthday])) BETWEEN 1 AND 7 THEN 1
WHEN DATEDIFF(day, '2021-09-09', DATEADD(year, DATEDIFF(year,[birthday], CAST('2021-09-09' as date)) , [birthday])) BETWEEN 8 AND 31 THEN 2
ELSE 3
END
)
,[birthday]
FROM [info].[member] E
WHERE [system_active] = 1
) A
ORDER BY day ASC
要获得更好的答案,请查看 MatBailie 的答案。这个解决方案对我有用
【问题讨论】:
-
您的代码假定
birthday是“今年”。您是否已经有一个流程可以在他们每次过生日时更新这些日期? (所以 Fred 可能出生于1998-02-28,但birthday列将具有2022-02-28?) 如果是这样,那么birthday何时更新? (在他们生日那天的开始,在他们生日的最后一天,在他们生日的一周结束时)?或者,birthday实际上是date-of-birth列,而year部分通常在过去很远? -
生日是他们出生的那一天,这个栏目不会更新
-
当你说
this week和this month时,正是你做什么> 什么意思?对于this week,您可以表示“在接下来的 7 天内”或“在前 7 天内”,或者将“工作周”或“日历周”视为周一至周日,并且您想要知道“今天”和“生日”是否在同一个“工作周”...... -
在接下来的 x 天内,一周内:今天是第 9 天。我想要从 9 日到 15 日过生日的每一个人。
-
一周多,也就是8天。 “月”是什么意思?
标签: sql sql-server tsql datediff