【问题标题】:Get first day of week T-SQL获取一周的第一天 T-SQL
【发布时间】:2020-06-04 21:19:27
【问题描述】:

如何获得一周的第一天(星期一),其中周 = 6 和年 = 2020 我需要得到 10.02.2020

例如。 2020 年第 1 周的日期为 06.01.2020 - 12.01.2020 2020 年第 6 周的日期为 10.02.2020 - 16.02.2020

【问题讨论】:

  • 参考哪一周?
  • 你展示了什么数据?
  • 这能回答你的问题吗? Get dates from a week number in T-SQL
  • @sveer 我是更新问题。
  • 您的问题不清楚。您是在尝试SELECT 显示表中datum 列中的值10.02.2020,还是尝试使用代码到达日期10.02.2020,只给出周数和年份?两个完全不同的问题。

标签: sql tsql


【解决方案1】:
DECLARE @YEAR int = 2020;
DECLARE @WEEKSTOADD int = 6;
SET DATEFIRST 1;

SELECT 
        DATEADD(day, 
                1 -  DATEPART(dw,DATEADD(week,@WEEKSTOADD,cast(cast(@YEAR as varchar(4)) + '0101' as date))), 
                DATEADD(week,@WEEKSTOADD,cast(cast(@YEAR as varchar(4)) + '0101' as date)))

【讨论】:

  • 提示:( @@DateFirst + DatePart( weekday, SampleDate ) - 1 ) % 7 + 1 将始终返回一个从17 的整数,其中1 对应于星期日,无论DateFirstLanguage 的设置如何。您可能希望更新您对现代版 SQL Server 的答案以使用 DateFromParts
  • 您想为“现代”SQL 更新哪一点?也许在不使用字符串的情况下创建一个现在可用的日期?我希望 1 代表星期一。
  • ( @@DateFirst + DatePart( weekday, SampleDate ) - 2 ) % 7 + 1 将开始日期移至星期一。是的,您不需要将年份转换为散文,连接几个字符并分析结果以获得Date
【解决方案2】:

无论DateFirstLanguage 的设置如何,以下代码都将获取给定日期所在周的星期一的日期:

Cast( DateAdd( day, - ( @@DateFirst + DatePart( weekday, Datum ) - 2 ) % 7, Datum ) as Date )

示例数据示例:

with SampleData as (
  select GetDate() - 30 as Datum
  union all
  select DateAdd( day, 1, Datum )
    from SampleData
    where Datum < GetDate() )
select Datum,
  -- 1 = Monday through 7 = Sunday.
  ( @@DateFirst + DatePart( weekday, Datum ) - 2 ) % 7 + 1 as WeekDay,
  -- Date of Monday in the week of the supplied date.
  Cast( DateAdd( day, - ( @@DateFirst + DatePart( weekday, Datum ) - 2 ) % 7, Datum ) as Date ) as Monday
  from SampleData;

【讨论】:

    【解决方案3】:

    根据您需要的样本数据substring()

    select t.*, substring(datnum, charindex(' ', datnum) + 1, 10) as dt
    from table t
    where t.week = 6;
    

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 2011-11-02
      • 1970-01-01
      • 2012-11-22
      • 2014-09-25
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多