日期:2014-05-16  浏览次数:20602 次

问两个关于日期的SQL?
1.以年为查询条件,统计出每年周六日的日期
  例如:2014-01-04 周六 
        2014-01-05 周日
        2014-01-11 周六
        2014-01-12 周日

2.以年为查询条件,统计出每年周一到周五的日期
  例如:2014-01-01 周三
        2014-01-02 周四
        2014-01-03 周五

 
------解决方案--------------------
select v,case datepart(dw,v) 
              when 1 then '周日'
              when 2 then '周一'                              
              when 3 then '周二'
              when 4 then '周三'
              when 5 then '周四'
              when 6 then '周五'
              when 7 then '周六'
         end d
              
from
(
select '2014-03-01' v union all
select '2014-03-02' v union all
select '2014-03-03' v union all
select '2014-03-04' v union all
select '2014-03-05' v union all
select '2014-03-06' v union all
select '2014-03-07' v union all
select '2014-03-08'
)t
where datepart(dw,v) in (2,3,4,5,6)

------解决方案--------------------

--周末
SELECT  *
FROM    ( SELECT    DATEADD(dd, number, '2014-01-01') AS dd
          FROM      master..spt_values
          WHERE     type = 'P'
        ) A
WHERE   DATEPART(dw, dd) IN ( 1, 7 )

--工作日
SELECT  *
FROM    ( SELECT    DATEADD(dd, number, '2014-01-01') AS dd
          FROM      master..spt_values
          WHERE     type = 'P'
        ) A
WHERE   DATEPART(dw, dd) not IN ( 1, 7 )