【问题标题】:Date Value from a week number in SQL [duplicate]SQL中一周数的日期值[重复]
【发布时间】:2012-06-28 08:20:48
【问题描述】:

可能重复:
Get dates from a week number in T-SQL

如果我在 SQL Query 中有周数,我如何获取日期值。

如果我通过 26,它应该给我 06/24/2012。如果我通过 27,我应该得到 07/01/2012

任何帮助将不胜感激:)

索斯

【问题讨论】:

  • 我假设你也在过去的一年,还是它永远是“当前”年份?您想要 ISO 周数,还是自 1 月 1 日以来的周数?
  • 这个问题只是噪音,没有命名特定的 RDBMS 或以其他方式指定目的。日期函数几乎与数据库无关。
  • @bluefeet:是什么让你假设 T-SQL?

标签: sql


【解决方案1】:

在 SQL Server 中

DECLARE @StartDate DATE, @WeekVal INT
SET @WeekVal = 26 -- Set the week number
SET @StartDate = DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) -- Start of current year

;WITH cte AS (
    SELECT @StartDate AS DateVal, DATEPART(wk, @StartDate) AS WeekVal, 1 AS RowVal
    UNION ALL
    SELECT DATEADD(d, 1, DateVal),  DATEPART(wk, DATEADD(d, 1, DateVal)), RowVal + 1 
    FROM cte WHERE RowVal < 365
)
SELECT MIN(DateVal) StartOfWeek
FROM cte
WHERE WeekVal = @WeekVal
OPTION (MAXRECURSION 365);

【讨论】:

    【解决方案2】:
    SELECT DATEADD(week, n, '11/25/2011');
    

    n 是周数

    【讨论】:

      【解决方案3】:

      如果这不起作用,请尝试使用WEEK() 而不是WEEKOFYEAR()

      CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY + INTERVAL (WEEKNO - WEEKOFYEAR(CURDATE())) WEEK
      

      【讨论】:

        【解决方案4】:

        这将为您提供一周的开始和结束日期。 [对于 SQL Server]

        Declare @week integer set @week = 26
        Declare @Year Integer Set @Year = year(getdate())
        declare @date datetime
        
        -- ------------------------------------
        Set @date = DateAdd(day, 0, 
                    DateAdd(month, 0, 
                    DateAdd(Year, @Year-1900, 0)))
        
        set @date = Dateadd(week, @week-1, @date)
        
        select @date startweek, DATEADD (D, -1 * DatePart (DW, @date) + 7, @date) endweek
        

        这是它的结果:

        startweek               endweek
        ----------------------- -----------------------
        2012-07-01 00:00:00.000 2012-07-07 00:00:00.000
        
        (1 row(s) affected)
        

        【讨论】:

          猜你喜欢
          • 2011-07-30
          • 1970-01-01
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-22
          • 1970-01-01
          相关资源
          最近更新 更多