SQL Server:从Year Month WeekOfMonth获取月份日期

时间:2015-06-23 09:20:46

标签: sql-server

我有一个来自SQL查询的复杂日历报告,其中我有年,月和WeekNumOfMonth(表示从月初开始的周数)。

我需要一个函数来返回给出Year,month和WeekNumOfMonth的DayOfMonth(即:1-28,29,30或31之间的值,具体取决于月份)。

我看过从年初开始给予WeekNum的函数,但我只有给定月份的WeekNum。我似乎无法正确地给出datePart和dateAdd函数。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

注意:年,月,周数的组合不会给你   日名,因为一周包含一天以上,所以你怎么找到   哪一天呢?这是不可能的

示例: year 2015 month 06 week number 1

然后它有

的组合
1 monday 
2  tuesday
3 wednesday
4 thursday
5 friday 
6 saturday 
然后用这些结果你怎么能预测到确切的一天?

否则需要一些条件或限制

如果您有年,月和日期,那么您可以使用以下查询找到日期名称,它将给出一周的开始和结束日期,然后您可以从开始日期和结束日期结束日期

SELECT (
  DATENAME(dw, 
  CAST(DATEPART(m, GETDATE()) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(d, '2015-06-23') AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(yy, getdate()) AS VARCHAR))
  )

更新

如果您需要当周之间的所有日期,请使用以下查询

DECLARE
    @Year INT,
    @Week INT,
    @FirstDayOfYear DATETIME,
    @FirstMondayOfYear DATETIME,
    @StartDate DATETIME,
    @EndDate DATETIME

SET @Year = 2015
SET @Week = 24// week number is based on year and it is not based on month

-- Get the first day of the provided year.
SET @FirstDayOfYear = CAST('1/1/' + CAST(@YEAR AS VARCHAR) AS DATETIME)

-- Get the first monday of the year, then add the number of weeks.
SET @FirstMondayOfYear = DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(DAY, 6 - DATEPART(DAY, @FirstDayOfYear), @FirstDayOfYear)), 0)

SET @StartDate = DATEADD(WEEK, @Week - 1, @FirstMondayOfYear)

-- Set the end date to one week past the start date.
SET @EndDate = DATEADD(WEEK, 1, @StartDate)

SELECT @StartDate AS StartDate, DATEADD(SECOND, -1, @EndDate) AS EndDate

<强>更新

如果没有年份周数,则使用以下查询

DATEPART(WEEK,'2015-06-01')

以上查询是一个例子

在查询中,您有两个YearMonth

  

您只需要第三个值,即日期

     

作为一种技术,你可以给01作为日期然后它会给出   开始周编号您选择的月份

这里结果是23,所以你在 2015 - 月06开始第23周时就有了这个想法,那么你可以很容易地做你的东西

想法:如果您的周数是1,那么如果它是2那么每周需要23,那么24就像明智一样..