当前位置: 代码迷 >> Sql Server >> SQL怎么算出一年中有多少周及每周的日期段,设周末为第一天
  详细解决方案

SQL怎么算出一年中有多少周及每周的日期段,设周末为第一天

热度:30   发布时间:2016-04-27 13:55:53.0
SQL如何算出一年中有多少周及每周的日期段,设周末为第一天
请教大家:
   
  周别定义 自周日 ~ 周六 例如: 2012年第一周 01/01~01/07天数为 7天,以此类推;

  想得出的结果如:

  年份 周别 日期范围
  2012 1 2012/01/01~2012/01/07
  .
  . 
  .


  先谢谢了!

------解决方案--------------------
SQL code
;with ach as(    select dateadd(dd,number,cast(ltrim(year(getdate()))+'-01-01' as datetime)) date    from master..spt_values    where [type] = 'p' and number between 0 and 400),cte as(    select *    from ach    where year(date) = year(getdate()))select datepart(wk,date) as wk,min(date) mindate,max(date) maxdatefrom ctegroup by datepart(wk,date)/********************wk          mindate                 maxdate----------- ----------------------- -----------------------1           2012-01-01 00:00:00.000 2012-01-07 00:00:00.0002           2012-01-08 00:00:00.000 2012-01-14 00:00:00.0003           2012-01-15 00:00:00.000 2012-01-21 00:00:00.0004           2012-01-22 00:00:00.000 2012-01-28 00:00:00.0005           2012-01-29 00:00:00.000 2012-02-04 00:00:00.0006           2012-02-05 00:00:00.000 2012-02-11 00:00:00.0007           2012-02-12 00:00:00.000 2012-02-18 00:00:00.0008           2012-02-19 00:00:00.000 2012-02-25 00:00:00.0009           2012-02-26 00:00:00.000 2012-03-03 00:00:00.00010          2012-03-04 00:00:00.000 2012-03-10 00:00:00.00011          2012-03-11 00:00:00.000 2012-03-17 00:00:00.00012          2012-03-18 00:00:00.000 2012-03-24 00:00:00.00013          2012-03-25 00:00:00.000 2012-03-31 00:00:00.00014          2012-04-01 00:00:00.000 2012-04-07 00:00:00.00015          2012-04-08 00:00:00.000 2012-04-14 00:00:00.00016          2012-04-15 00:00:00.000 2012-04-21 00:00:00.00017          2012-04-22 00:00:00.000 2012-04-28 00:00:00.00018          2012-04-29 00:00:00.000 2012-05-05 00:00:00.00019          2012-05-06 00:00:00.000 2012-05-12 00:00:00.000...
------解决方案--------------------
有函数的,自己拿去改一下


SQL季度函数
 SELECT DATEPART(quarter,GETDATE()) --获取当前季度 

这个季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

上个季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-1, 0)

上上个季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-2, 0)

上上上个季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-3, 0)

......

n个季度前的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-n, 0)

这个季度的最后一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())+1, -1)

上个季度的最后一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), -1)

上上个季度的最后一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-1, -1)

n个季度前的最后一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate())-n+1, -1)

一个月第一天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))


去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
  相关解决方案