Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:从年-月-周-月获取月的第几天_Sql Server - Fatal编程技术网

Sql server SQL Server:从年-月-周-月获取月的第几天

Sql server SQL Server:从年-月-周-月获取月的第几天,sql-server,Sql Server,我有一个复杂的日历报告,来自一个SQL查询,其中我有年、月和周NumofMonth(表示从月初开始的周数) 我需要一个函数来返回给定年份、月份和WeekNumOfMonth的DayOfMonth(即:值介于1-28、29、30或31之间,具体取决于月份) 从年初开始,我就看到过一些函数在给定的周数中执行此操作,但我只有给定月份的周数。我似乎无法正确地赋予datePart和dateAdd函数。任何帮助都将不胜感激 注:年、月、周数的组合不会给出 日期名称,因为一周包含多个日期,所以如何查找 今天是

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

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

从年初开始,我就看到过一些函数在给定的周数中执行此操作,但我只有给定月份的周数。我似乎无法正确地赋予datePart和dateAdd函数。任何帮助都将不胜感激

注:年、月、周数的组合不会给出 日期名称,因为一周包含多个日期,所以如何查找 今天是哪一天?这是不可能的

示例:
2015年第6个月第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')
上面的查询就是一个例子

在查询中,您有两个值,即

您只需要表示日期的第三个值

作为一种技术,您可以将01作为日期,然后它将给出 所选月份的起始周数

这里的结果是23,所以你在2015年得到了这个想法-06月从第23周开始,这样你就可以轻松地完成你的工作了


想法:如果你的周数是1,那么就拿23作为周数,如果是2,那么就拿24作为周数。

请展示一些日期和期望输出的样本,正如你所说的,如果你只有一周,我无论如何都看不到确定一个月的哪一天,因为肯定是7天中的1天?你打算用什么逻辑来缩小范围?你只想要第一天吗?年+月+周数的组合不会给你第二天。我的查询是从[vwBookingsFormMonth]中选择[YR]、[MonthNum]、[WeekOfMonth]、[sun]、[mo]、[tu]、[we]、[th]、[fr]、[sa]的顶部,因此一年中每个月的每周都有一行。如果我引入了日期,那么数据会被连接多次。我正试图以一种非常紧凑的格式为一个月的预订填充一个调度控件,以便可以轻松打印。我将尝试@arunprasanth1111建议,我会让你知道的。OP非常清楚地说:“我只有给定月份的周数。”这对他不起作用我希望如果他有周数和月数,那么他可以找到一年中的周数你是对的,我不会提供这样做的代码。但他可以这样做,如果他采取一些努力…我是对的吗?如果我错了,请纠正我。很难说。如果一个月从星期四开始,那么前三天是否是一个月的第一周?你是对的,前三天是一周…所以你说不可能从月份和月份的周数中得到一年的周数???同一周的前四天是在上个月。有可能,但我认为会很复杂