SQL转换周数到日期(年/月)

时间:2016-05-27 10:22:21

标签: sql sql-server tsql

我正在尝试将SQL Server中的周数(例如: 21 )转换为中的日期(从该周的星期一开始) dd / MM 格式。

我在网上搜索但似乎找不到任何可以使用的东西。

这是我可以做的事情吗?

感谢任何帮助或建议。

提前谢谢。

4 个答案:

答案 0 :(得分:7)

试试这个,

declare @wk int  set @wk = 21
declare @yr int  set @yr = 2016

select dateadd (week, @wk-1, dateadd (year, @yr-1900, 0)) - 4 -
       datepart(dw, dateadd (week, @wk-1, dateadd (year, @yr-1900, 0)) - 4) + 1

或尝试这种方式

declare @wk int  = 21

select dateadd(week,@wk-1, DATEADD(wk, DATEDIFF(wk,-1,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)), 0)) 

答案 1 :(得分:4)

你可以这样做:

declare @Week_Number int, @Year int, @Year_Start_Day date, @Week_Day date

select 
    @Week_Number = 1,
    @Year = 2016

select @Year_Start_Day = cast(@Year as nvarchar(4)) + '0101'
select @Week_Day =  dateadd(wk, @Week_Number, @Year_Start_Day)

select dateadd(dd, 1 - datepart(weekday, @Week_Day), @Week_Day)

答案 2 :(得分:1)

这样做:

DECLARE @y int = 2016,
        @w int = 21

SELECT CONVERT(nvarchar(5),DATEADD(day,@w*7-(DATEPART(WEEKDAY,CAST(@y as nvarchar(4))+'-01-01')-2),CAST(@y as nvarchar(4))+'-01-01'),3)

输出:

23/05

答案 3 :(得分:0)

这个怎么样?

DECLARE @YearNum SMALLINT = 2016;
DECLARE  @WeekNum TINYINT=25;

select 
    SUBSTRING(CONVERT(VARCHAR(10),selected_date,105),0,6) AS WeeKDate
from 
(select DATEADD(dd,t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i,'1970-01-01') selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where YEAR(selected_date)=@YearNum
AND DATEPART(WK,selected_date)=@WeekNum
AND DATEPART(WEEKDAY,selected_date)=2 -- Monday