如何通过传递周数来获取sql中的月份数

时间:2015-07-01 05:25:48

标签: mysql sql-server-2005

这是我的功能如下

CREATE FUNCTION  getmonth
(        

 @startdate  datetime,@Week int
)        
RETURNS  int        
AS        
BEGIN                      
 declare @year int,@Month int;              
 declare @sdate  datetime=@startdate;       
 set @year= year(CAST(@startdate as date));  
 set @sdate = DATEADD(wk, DATEDIFF(wk, 6,  '1/1/' + CAST( @year as varchar(4)) ) + (@Week-1) ,1);           
  SET @Month = month( @sdate);              
 return @month        

END        

我只希望此功能在我们通过年份的周数和周开始日期时返回月份数。

周应该从周日开始,到周六结束。

示例

2015年,周开始日期为2014年12月28日。当我们通过周数时,它应该返回2015年的月份数。

3 个答案:

答案 0 :(得分:0)

假设第一周从2015-01-01(或每年1月1日)开始,并且您正在使用MySQL。

此查询将使用星期返回月号。

select DATE_FORMAT( DATE_ADD('2015-01-01', INTERVAL 5 WEEK) ,'%m')

此处,2015-01-01是开始日期。在INTERVAL 5 WEEK中,数字5是您将提供的周数

结果:02,即一年中的第二个月!

使用:

https://stackoverflow.com/a/11423781/3578289

http://www.w3schools.com/sql/func_date_format.asp

答案 1 :(得分:0)

选择now(),curdate(),curtime()

没有当前月份或当前周,但有查询知道当前日期和时间.. 使用下面显示的示例查询。

实施例: - CREATE TABLE getmonth ( getmonthId int NOT NULL, ProductName varchar(50)NOT NULL, getmonthDate datetime NOT NULL DEFAULT NOW(), 主键(getmonthId) )

答案 2 :(得分:0)

对于SQL Server 2005,您可以使用DATEADD和DATEPART的组合。您可以轻松地将其折叠为单行代码,但这样可以更容易阅读。

declare @startdate datetime
  , @week int
  , @enddate datetime
  , @mo int

select @startdate = '12/28/2014', @week = 23
select @enddate = dateadd(wk, @week, @startdate)
select @mo = datepart(m, @enddate)

select @mo, @enddate