在 T-SQL 中,我需要查找一个月中的 ISO 周数。
根据客户规范,一周属于该周编号为星期日的月份。
例如,2024 年第 5 周属于二月,而不是一月,因为 2 月 4 日星期日是二月。
上下文:我需要使用它根据该月每周指定的人员需求来查找给定月份的平均人员需求,如以下简化的伪代码所示:
WeeklyStaffingNeedsTotal / GetNumberOfIsoWeeksInMonth(年,月) AS MonthlyStaffingNeed
不是完整答案(问题不清楚) 我不清楚你需要什么以及如何过滤,但这是一个脚本,包含一年中的日期列表,其中包含 weekname 、 day 和 day name (以防万一) 这就是你的起点
DECLARE @MinDate DATETIME = '2024-1-1 00:02:00.000',
@MaxDate DATETIME = '2024-12-31 00:00:00.000';
Select * from (
select
dates,
WeekNumber = datepart(wk, dates),
DayNumber = datepart(day, dates),
DayName = FORMAT(CAST(dates AS DATE), 'ddd')
from (
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Dates = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a CROSS JOIN sys.all_objects b
) c
) w
结果将是
| dates | WeekNumber | DayNumber | DayName |
| ----------------------- | ---------- | --------- | ------- |
| 2024-01-01 00:02:00.000 | 1 | 1 | Mon |
| 2024-01-02 00:02:00.000 | 1 | 2 | Tue |
| 2024-01-03 00:02:00.000 | 1 | 3 | Wed |