Как я могу узнать, сколько номеров недель находится в заданном интервале времени в T-SQL

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

Например, вместо - > datepart(week,dateadd(day,-1,@oneSingleDate)) (понедельник - первый день недели) ,

мне нужно что-то вроде

- > datepart(week,@startDate,@endDate) 

Учитывая интервал '2019-01-04'-'2019-01-28', вывод должен быть:

Неделя № : 1,2,3,4,5 .

Возможный дубликат SQL Server 2008 Генерация серии дат и времени

Raymond Nijland 14.06.2019 11:14

Присоединяйтесь к таблице календаря с помощью между и получить номера недель.

EzLo 14.06.2019 11:14

Возможный дубликат Как Stuff и «For Xml Path» работают на сервере Sql

Raymond Nijland 14.06.2019 11:14

Просто объедините оба повторяющихся вопроса/ответа для запроса, который даст вам правильный набор результатов, в SQL Server 2017 вы можете использовать STRING_AGG() вместо STUFF

Raymond Nijland 14.06.2019 11:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

я использовал рекурсивный CTE для генерации всех дат в диапазоне, затем я выбрал из них номера недели DISTINCT, используя DATEPART. Затем я объединил затем вашу строку, разделенную запятыми, в переменную с именем @OUT

DECLARE @startDate as date = '20190104';
DECLARE @endDate as date = '2019-01-28';

DECLARE @OUT as nvarchar(max);

WITH CTE AS (SELECT @startDate As X
             UNION ALL
             SELECT DATEADD(y, 1, X) X FROM CTE where x < @endDate),
    CTE2 AS (SELECT DISTINCT datepart(wk, X) wk from cte)
    select @out = coalesce(@out + ', ', '') + cast(wk as nvarchar(4))  from cte2
    OPTION (MAXRECURSION 0);

    select @out;

Вы можете сделать это следующим образом: с использованием : - [CTE][1] общее табличное выражение - [Объединение рекурсии Sql все][2] - [Объединение нескольких строк в одну строку][3]

declare @startDate as date ;
declare @endDate as date ;
set @startDate='2019-01-04'; 
set @endDate='2019-01-28' ;
DECLARE @weeks VARCHAR(8000) ;
with cte as (select @startDate as mydate,datepart(week,@startDate) w
union all select
dateadd(day,1,mydate),datepart(week,dateadd(day,1,mydate))  from cte
where mydate < @endDate) , cte2 as (select distinct(w) from cte)
select @weeks=COALESCE(@weeks + ', ', '') +cast(w as varchar(2)) from
cte2 OPTION (MAXRECURSION 360) select @weeks [Result]

Другие вопросы по теме