Другие упоминали, как узнать день недели.
С точки зрения вашего кода для получения недели месяца:
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
На мой взгляд, число полных месяцев, прошедших между нулевым днем и текущей датой, дает нам серийный номер месяца.
Затем к этому значению добавляется ноль месяцев (которые, очевидно, используются для приведения серийного месяца обратно к дате, представляющей начало текущего месяца), давая нам дату начала месяца.
Затем он получает количество полных недель, прошедших между нулевым днем и датой начала месяца, давая нам недельный сериал.
Серийный номер недели затем возвращается к дате начала недели, представляющей понедельник до или до даты начала месяца.
Затем он получает разницу в неделях между датой в понедельник или ранее и днем, предшествующим текущей дате, и добавляет 1 (чтобы первая неделя месяца была представлена как неделя 1).
Звучит как правдоподобный алгоритм, но я бы не одобрил его, не проверив и не проверив промежуточные значения, или если вы не нашли его из авторитетного источника.