С помощью этого синтаксиса вы можете получить неделю для даты.
SELECT datepart(week, '20111007'), datepart(iso_week, '20111007')
iso_week работает только с sqlserver 2008.
Вы действительно должны рассмотреть вопрос о превращении поля недели в вычисляемый столбец. Это сделает вашу жизнь намного проще (я бы использовал это решение).
Это будет ваш синтаксис:
alter table <yourtable> add week1 as datepart(week, <yourdatecolumn>)
Если вам по каким-либо причинам будет запрещено вносить изменения в базу данных, вы можете использовать это:
UPDATE <table>
SET <weekcolumn> = datepart(week, <yourdate>)
WHERE week is null and <yourdate> is not null
Проблема в том, что при изменении даты неделя останется прежней и неделя будет недоступна до тех пор, пока не будет использован этот сценарий, если неделя не будет обновлена триггером.
Вы также можете создать представление для отображения всех столбцов и добавить неделю в качестве вычисляемого поля, это также будет правильным решением. Хотя рекомендуется использовать список столбцов вместо использования wildchar (*), я использовал его, потому что я не знаю ваших столбцов.
CREATE VIEW v_yourview as
SELECT *, datepart(week, <yourdate>) week1 FROM <table>