年末的半周放到
SQL code
select datepart(year,'2007-12-30')
select datepart(week,'2007-12-30')
-----------
2007
(1 行受影响)
-----------
53
(1 行受影响)
想要自定义函数或其他方法,可以实现:
能够根据一年的最后一周的情况把返回的年和周作调整,如果最后一周在一周内有08年的日期时候,整个一周算第二年的第一周。
如果一周内没有后一年的日期,比如12-31日是星期日,那么这周还算是当前年和当前周,不调整。
结果如下:
上面的日期李子要得到以下结果,如何实现?
-----------
2008
(1 行受影响)
-----------
1
(1 行受影响)
------解决方案--------------------select DATEADD(wk,DATEDIFF(wk,0,'2007-12-30'),5)--取同一周中最后一天
select year(DATEADD(wk,DATEDIFF(wk,0,'2007-12-30'),5)) --的年份
select datepart(wk,DATEADD(wk,DATEDIFF(wk,0,'2007-12-30'),5))--的星期
做成函数也行
------解决方案--------------------select case when datepart(weekday,(convert(varchar(4),convert(int,datepart(year,'2007-12-30'))+1)+'-01-01'))>1 and datediff(day,'2007-12-30',datepart(weekday,(convert(varchar(4),convert(int,datepart(year,'2007-12-30'))+1)+'-01-01')))<7
then 1 else datepart(week,'2007-12-30') end as W
------解决方案--------------------一般sql好像是默認一星期是從星期日-->星期六這樣來排的,
或者改變默認值,或者在寫法上動手腳。