查找本年度/上一周的开始日期/结束日期

时间:2014-02-14 19:27:32

标签: sql sql-server week-number

我对SQL磕磕绊......看看你是否可以帮助5和6

  

业务需求

  1. 我有myDate
  2. 我希望SQL为myDate提供周数
  3. 我希望SQL为myDate
  4. 返回今年的开始日期
  5. 我希望SQL为myDate
  6. 返回今年的截止日期
  7. (需要帮助)我希望SQL为myDate
  8. 返回LAST YEAR的周开始日期
  9. (需要帮助)我希望SQL为myDate
  10. 返回LAST YEAR的周结束日期

    对数据的评论

    1. 提供日期
    2. 日期属于2014年第19周
    3. 2014年第19周日
    4. 2014年第19周六。
    5. 2013年第19周的星期日(需要帮助通过SQL获取此日期)
    6. 2013年第19周的星期六(需要帮助用SQL获取此日期)

    7. 样本数据

      1. 2014年5月6日
      2. 19
      3. 2014年5月4日
      4. 2014年5月10日
      5. 2013年5月5日
      6. 2013年5月11日

      7. SQL Queseries

        1. NA
        2. SELECT datepart(week,'05 / 06/2014')
        3. SELECT CONVERT(varchar(50),(DATEADD(dd,@@ DATEFIRST - DATEPART(dw,'05 / 06/2014') - 6,'05 / 06/2014')),101)
        4. SELECT CONVERT(varchar(50),(DATEADD(dd,@@ DATEFIRST - DATEPART(dw,'05 / 06/2014'),'05/06/2014')),101)
        5. 男人......我在这里遇到sql block
        6. 再次......在这里点击sql块

1 个答案:

答案 0 :(得分:0)

这就是你需要的吗?

SELECT CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw,  DATEADD(year, -1, '05/06/2014')) - 6, DATEADD(year, -1, '05/06/2014'))), 101)
SELECT CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw,  DATEADD(year, -1, '05/06/2014')), DATEADD(year, -1, '05/06/2014'))), 101)

另外,如果是这种情况,我会使用一些变量。

declare @date Datetime = '05/06/2014'
declare @datePreviousYear Datetime = DATEADD(year, -1, @date)
declare @currentYeardateCalculated int = @@DATEFIRST - DATEPART(dw,  @date)
declare @lastYearDateCalculated int = @@DATEFIRST - DATEPART(dw,  @datePreviousYear)

--1
SELECT @date
--2
SELECT datepart(week,@date )
--3
SELECT  CONVERT(varchar(50), (DATEADD(dd, @currentYeardateCalculated - 6, @date)), 101)
--4
SELECT CONVERT(varchar(50), (DATEADD(dd, @currentYeardateCalculated, @date)), 101)

--5
SELECT  CONVERT(varchar(50), (DATEADD(dd, @lastYearDateCalculated - 6,@datePreviousYear)), 101)
--6
SELECT CONVERT(varchar(50), (DATEADD(dd, @lastYearDateCalculated , @datePreviousYear)), 101)