Я знаю, что этот пост очень старый, но я пытался сделать то же самое, придумал другое решение и решил, что отправлю пост для потомков. Плюс я немного искал и не нашел много контента по этому вопросу.
В моем случае я пытался использовать вычисляемый столбец PERSISTED, который требует, чтобы вычисление было детерминированным. Я использовал следующие расчеты:
datediff(dd,'2010-01-03',[DateColumn]) % 7 + 1
Идея состоит в том, чтобы выяснить известное воскресенье, которое, как вы знаете, произойдет до любой возможной даты в вашей таблице (в данном случае, 3 января 2010 г.), а затем вычислить по модулю 7 + 1 числа дней с этого воскресенья.
Проблема в том, что включение буквенной даты в вызов функции достаточно, чтобы пометить ее как недетерминированную. Вы можете обойти это, используя целое число 0 для представления эпохи, которая для SQL Server 1 января 1900 года, воскресенье.
datediff(dd,0,[DateColumn]) % 7 + 1
+1 только заставляет результат работать так же, как datepart (dw, [datecolumn]), когда datefirst установлен на 7 (по умолчанию для США), который устанавливает воскресенье на 1, понедельник на 2 и т. Д.
Я также могу использовать это в сочетании с case [thatComputedColumn], когда 1, затем «воскресенье», когда 2, а затем «понедельник» ... и т. Д. Более сложный, но детерминированный, что было требованием в моей среде.