sqlserver 判断某一天是几月的第几周

花落随风 2016-04-07 04:25:13
比如2016-1-1 是12月的第4周,2016-1-4 开始是第一周

也就是一每个月的第一个星期一开始算是第几周
...全文
1068 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
範先森 2016-04-07
  • 打赏
  • 举报
回复
declare @date datetime set @date = '2016-04-07' select cast(datepart(mm,@date) as varchar(2)) + '月第' + cast((datepart(wk,@date) - datepart(wk,convert(varchar(7),@date,120) + '-01') + 1) as varchar(2)) + '周'
唐诗三百首 2016-04-07
  • 打赏
  • 举报
回复

create function dbo.getMonthWeek(@d date)
returns varchar(20)
as
begin
declare @returns varchar(20),
              @monthfirstDay date,
              @firstMondy date

select @monthfirstDay=left(convert(varchar,@d,23),7)+'-01'

if not exists(select 1 
                     from master.dbo.spt_values
                     where type=N'P' and number between 0 and datediff(d,@monthfirstDay,@d)
                     and datepart(dw,dateadd(d,number,@monthfirstDay))=2)
begin
  select @monthfirstDay=dateadd(mm,-1,@monthfirstDay)
end

  ;with t as(select 'days'=dateadd(d,number,@monthfirstDay)
                   from master.dbo.spt_values
                   where type=N'P' and number<=7)
   select @firstMondy=min([days]) 
    from t
    where datepart(dw,[days])=2

select @returns=rtrim(datepart(mm,@monthfirstDay))+'月'
                          +'的第'+rtrim(datediff(d,@firstMondy,@d)/7+1)+'周'

return @returns
end


-- 2016-1-1 是12月的第4周
select dbo.getMonthWeek('2016-1-1') 'result'
/*
result
--------------------
12月的第4周

(1 row(s) affected)
*/


-- 2016-1-4 开始是第一周
select dbo.getMonthWeek('2016-1-4') 'result'
/*
result
--------------------
1月的第1周

(1 row(s) affected)
*/


-- 2016-4-7 开始是第一周
select dbo.getMonthWeek('2016-4-7') 'result'
/*
result
--------------------
4月的第1周

(1 row(s) affected)
*/
中国风 2016-04-07
  • 打赏
  • 举报
回复
SELECT @@DATEFIRST--SET DATEFIRST 指定一周中的第一天。美国英语中默认 7 对应星期日。

--针对以上默认 7 对应星期日
DECLARE @Dt DATE='2016-4-1'
SELECT RTRIM(CASE WHEN DATEPART(dw,DATEADD(dd,-1,@Dt))>=5 THEN MONTH(DATEADD(dd,-7,@dt)) ELSE MONTH(@dt) END)+'月的第'
+RTRIM(CASE WHEN DATEPART(dw,DATEADD(dd,-DAY(@Dt),@Dt))>=5 THEN 0 ELSE 1 END+CASE WHEN DATEPART(dw,DATEADD(dd,-1,@Dt))>=5 THEN CEILING(DAY(DATEADD(dd,-7,@dt))/7.0) ELSE CEILING(DAY(@dt)/7.0) END)
+'周'
花落随风 2016-04-07
  • 打赏
  • 举报
回复
从每个月的第一个星期一算起,周一到周日就是第一周,一个月的的第几个周一就是第几周的开始日期

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧