Trogers96 Ответов: 1

Справка по делу Sql server первый рабочий день недели


Здравствуйте, я работаю над поиском первого рабочего дня недели/месяца/квартала/года/финансового месяца и т. д. Я делаю это всего за неделю прямо сейчас, так как у меня есть небольшие проблемы.

SET first_business_day_week = CASE
	WHEN [day_full_name] = 'Monday' AND [day_business_day_flag] = '1' THEN 1
	WHEN [day_full_name] = 'Tuesday' AND [day_business_day_flag] = '1' THEN 1 ELSE 0
END


Работает, но дает мне несколько понедельников и вторников в качестве рабочих дней. Если первая строка WHEN истинна, то как я могу заставить ее игнорировать вторую строку WHEN?

Я чувствую, что ответ может быть простым, и я слишком усложняю его.

*ОБНОВЛЕНИЕ*

day_full_name - это varchar(9)
day_business_day_flag-это бит, который вычисляет, является ли день не федеральным праздником США и является будним днем. Возвращает 1, если не праздник, не выходные.
first_business_day_week-это varchar(10), который должен дать мне дату первого рабочего дня недели. Я просто пытался 1/0 сейчас, потому что я могу понять часть даты, как только у меня будет все остальное.

*Обновление 2*

Я использовал предыдущую строку для first_day_of_month, и это может работать аналогично для первого рабочего дня недели.
ORMAT (CONVERT(DATETIME, CONVERT(DATE, DATEADD(DD, - (DATEPART(DD, @CurrentDate) - 1), @CurrentDate))),'MM/dd/yyyy') AS First_Day_Of_Month,

Мне просто нужно было бы выяснить эту формулу, а затем добавить к ней трекер рабочего дня, чтобы проверить ее.

Что я уже пробовал:

добавление Else 0 к первому, когда строка -> не сработала

Maciej Los

Можете ли вы поделиться примерами данных? Основываясь на вашем описании я не могу понять как это сделать day_full_name это связано с day_business_day_flag.. а зачем вам нужно ломаться case when инструкция После нахождения первого рабочего/рабочего дня.

Trogers96

Я понял, что сделал этот пост до того, как выпил кофе, так что голый со мной ЛОЛ, но в моем столе у меня есть
[day_full_name] varchar(9), -- содержит название дня, воскресенье, понедельник
[day_of_week] char(1),-- первый день воскресенье=1 и суббота=7
[day_business_day_flag] бит Null -- 1=BusinessDay, 0=NonBusinessDay
[day_bank_holiday_flag] бит, -- 1=Праздник, 0=не праздник
[day_weekday_flag] бит, -- 1=будний день, 0=выходные
Функция, которую я должен вычислить, если этот день является рабочим днем или нет, должна быть равна 0 для day_bank_holiday_flag и 1 для day_weekday_flag.

/*Индикатор Рабочего Дня*/
Обновление [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM]
Установить day_business_day_flag = '1'
Где day_bank_holiday_flag = 0 и day_weekday_flag = 1
Обновление [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM]
Набор day_business_day_flag = случай, когда day_business_day_flag не null тогда 1 когда day_business_day_flag null тогда 0 конец

1 Ответов

Рейтинг:
6

#realJSOP

Попробуйте этот код:

declare @firstBusinessDay int = 2; -- 2 = monday
declare @isFirstBusDay varchar(10) = case when DATEPART(dw, GetDate()) = @firstBusinessDay then 'yes' else 'no' end;
select @isFirstBusDay;