任意月份获取周数非自然周

需要任意月份,不只9月,如图所示,sqlserver或帆软公式,期望获得结果

周          开始日期        结束日期

第一周  2024-09-01  2024-09-01

第二周  2024-09-02  2024-09-08

等等

图片.png

FineReport 帆软用户du7GhX9Kl2 发布于 2024-8-29 15:40
1min目标场景问卷 立即参与
回答问题
悬赏:9 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
3
快乐星光Lv5中级互助
发布于2024-8-29 16:22

参考下面语句,不同的数据库可能日期处理函数不一样。

set datefirst 1 ;-- 设置周1为第一天

DECLARE @wyr varchar(100) -- 控件名称

set @wyr='日' 

--set @wyr='周' 

--set @wyr='月' 

select *,case when @wyr='日' or len(@wyr)=0 then CONVERT(varchar(100),ddate,23)

              when @wyr='周' then 周区间

when @wyr='月' then cast(month(ddate) as varchar(100))

else CONVERT(varchar(100),ddate,23) end as 横向扩展字段

from (

select ddate,

'第'+cast((datepart(wk,ddate) - datepart(wk,convert(varchar(7),ddate,120) + '-01') + 1) as varchar(2)) + '周' AS  周,

case when  month(ddate) >

month(DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0))

then convert(varchar(10),DATEADD(DD,-DATEPART(day,ddate)+1,ddate),120)   

else convert(varchar(10),DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0),120)  

end -- AS 周首日期,

+'=>'+

case when  month(ddate) <

month(DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0)))

then convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(MM,1,ddate)),dateadd(MM,1,ddate)),120)

else convert(varchar(10),DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0)),120) 

end -- AS 周未日期,

AS 周区间

from (

select dateadd(dd,number,cast('2024'+'-01-01' as datetime)) ddate

from master..spt_values

where [type] = 'p' and number between 0 and 400

) d

where d.ddate>='2024-09-01' and d.ddate<='2024-09-30'   -- 时间区间控件

group by ddate

 ) ss

image.png

最佳回答
0
华莉星宸Lv7资深互助
发布于2024-8-29 15:51

做个维表一关联不是很简单嘛

image.png

  • 帆软用户du7GhX9Kl2 帆软用户du7GhX9Kl2(提问者) 不想做表,要是做表我都不问了,做个表每年的维护,很麻烦
    2024-08-29 15:52 
  • 华莉星宸 华莉星宸 回复 帆软用户du7GhX9Kl2(提问者) 好吧~一次性维护N年的数据
    2024-08-29 15:54 
  • 用户k6280494 用户k6280494 回复 华莉星宸 搞几年的每个月的都要人工维护
    2024-08-29 16:06 
最佳回答
0
清语墨安Lv4见习互助
发布于2024-8-29 15:56

使用帆软的weekdate公式,可以获取到指定年月的每一周的周几的日期。所以你只需要用sql查出年月日期即可

image.png

  • 4关注人数
  • 224浏览人数
  • 最后回答于:2024-8-29 17:30
    请选择关闭问题的原因
    确定 取消
    返回顶部