我正在尝试将SQL Server中的周数(例如: 21 )转换为中的日期(从该周的星期一开始) dd / MM 格式。
我在网上搜索但似乎找不到任何可以使用的东西。
这是我可以做的事情吗?
感谢任何帮助或建议。
提前谢谢。
答案 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