日期:2014-05-18  浏览次数:20579 次

年末的半周放到
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好像是默認一星期是從星期日-->星期六這樣來排的,
或者改變默認值,或者在寫法上動手腳。