【问题标题】:How can I find how many Week Numbers are in a given interval of time in T-SQL如何在 T-SQL 中找到给定时间间隔内的周数
【发布时间】:2019-06-14 09:08:20
【问题描述】:

我有点卡在这里,我想在给定的时间间隔内找到所有周数,但我真的无法弄清楚

例如,而不是 - > datepart(week,dateadd(day,-1,@oneSingleDate))(星期一是一周的第一天),

我需要类似的东西

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

给定间隔'2019-01-04'-'2019-01-28',输出需要是:

周号:1,2,3,4,5.

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我使用递归 CTE 生成范围内的所有日期,然后使用 DATEPART 从它们中选择 DISTINCT 周数。然后我将 then 连接到您的逗号分隔字符串中,然后将其连接到一个名为 @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;

【讨论】:

    【解决方案2】:

    你可以这样做: 使用 : - [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]
    

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2017-01-30
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多