Я использую приведенный ниже код SQL в MS SSMS, чтобы найти дату окончания недели. Мне часто приходится переключаться между средой и воскресенью как день окончания недели. Боковое замечание, мои наборы данных часто находятся в 100 000.Эффективный способ определения даты окончания недели без таблицы календаря
Есть ли более эффективный способ сделать это, чем то, что у меня ниже, чем использование таблицы календаря?
/* Declare Variables */
DECLARE @WeekendingDay VARCHAR(10);
DECLARE @DayNumber INT;
DECLARE @InputDate VARCHAR(10);
DECLARE @conInputDate DATETIME;
DECLARE @outWeekending DATETIME;
DECLARE @CovertToInt VARCHAR(10);
/* --------------------Inputs-------------------- */
/* uncomment the weekending day you want */
--Set @WeekendingDay = 'Monday'
--Set @WeekendingDay = 'Tuesday'
--Set @WeekendingDay = 'Wednesday'
--Set @WeekendingDay = 'Thursday'
--Set @WeekendingDay = 'Friday'
--Set @WeekendingDay = 'Saturday'
SET @WeekendingDay = 'Sunday';
/* Date you want the weekending of */
SET @InputDate = '29/12/2016';
/* --------------------Process-------------------- */
SET @DayNumber = CASE @WeekendingDay
WHEN 'Sunday' THEN 1
WHEN 'Monday' THEN 2
WHEN 'Tuesday' THEN 3
WHEN 'Wednesday' THEN 4
WHEN 'Thursday' THEN 5
WHEN 'Friday' THEN 6
WHEN 'Saturday' THEN 7
END;
SET @conInputDate = CONVERT(DATETIME, @InputDate, 103);
SET @outWeekending = DATEADD(dd,
CASE WHEN DATEPART(DW, @conInputDate) = @DayNumber
THEN 0
ELSE -1 * DATEPART(DW, @conInputDate) + 7
+ @DayNumber
END, @conInputDate);
/* --------------------Output-------------------- */
PRINT @outWeekending;
Этот вопрос будет привлекать много мнений, что приводит к закрытию, но если вы вызываете это много, то я бы рассматривать календарную таблицу все даты из (некоторых дат) до (некоторых будущих дат, года от теперь), который имеет начало и конец недели на основе любой комбинации. Его нужно будет вычислить только один раз ... затем вы можете запросить его или присоединиться к нему с этого момента и сэкономить много времени. – scsimon
Вы хотите рассчитать дату окончания недели для каждой из 100 000 записей? Является ли выражение, входящее в состав SQL-запроса на основе набора? – Cato
вы можете сэкономить один случай, установив DayNumber direct вместо перехода на WeekendDay, но он не спасет вас в любое время. – GuidoG