SQL server做日历,sql凭空生成日期数据,空表

DECLARE @date CHAR(10)
SET @date = '2010-12-16'
SET @date = convert(varchar(10),getdate(),120)

SELECT SUN = MAX(CASE WHEN a.xq = 1 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       MON = MAX(CASE WHEN a.xq = 2 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       TUE = MAX(CASE WHEN a.xq = 3 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       WED = MAX(CASE WHEN a.xq = 4 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       THU = MAX(CASE WHEN a.xq = 5 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       FRI = MAX(CASE WHEN a.xq = 6 THEN CONVERT(CHAR(2),a.number) ELSE '' END),
       SAT = MAX(CASE WHEN a.xq = 7 THEN CONVERT(CHAR(2),a.number) ELSE '' END) 
FROM (
      SELECT a.number  --本月号数
             ,xq = DATEPART(weekday,LEFT(@date,8)+ CONVERT(CHAR(2),a.number)) --星期几
             ,zs = DATEDIFF(week,CONVERT(char(7),LEFT(@date,8)+ CONVERT(CHAR(2),a.number),121)+ '-01 ',LEFT(@date,8)+ CONVERT(CHAR(2),a.number))+1 --本月周数
      FROM master..spt_values a
      WHERE a.type = 'P'
            AND number BETWEEN 1 AND (select DAY(DATEADD(dd,-DATEPART(dd,@date) ,DATEADD(mm,1,@date))))  --本月号数范围
      ) a
GROUP BY a.zs

SUN  MON  TUE  WED  THU  FRI  SAT
---- ---- ---- ---- ---- ---- ----
                         1    2
3    4    5    6    7    8    9
10   11   12   13   14   15   16
17   18   19   20   21   22   23
24   25   26   27   28   29   30
31                             

(6 行受影响)

凭空生成日期数据

DECLARE @sdate CHAR(10)
DECLARE @edate CHAR(10)
SET @sdate = '2010-12-16'--开始日期
SET @edate = '2011-2-16' --结束日期

SELECT CONVERT(varchar(10),DATEADD(dd,a.number,@sdate),120) as 日期
  FROM master..spt_values a --系统表
  WHERE a.type = 'P' 
  AND number BETWEEN 0 AND (select DATEDIFF(dd,@sdate,@edate))

结果如下:

日期
----------
2010-12-16
2010-12-17
2010-12-18
2010-12-19
2010-12-20
2010-12-21
2010-12-22
2010-12-23
2010-12-24
2010-12-25
2010-12-26
2010-12-27
2010-12-28
2010-12-29
2010-12-30
2010-12-31
2011-01-01
2011-01-02
2011-01-03
2011-01-04
2011-01-05
2011-01-06
2011-01-07
2011-01-08
2011-01-09
2011-01-10
2011-01-11
2011-01-12
2011-01-13
2011-01-14
2011-01-15
2011-01-16
2011-01-17
2011-01-18
2011-01-19
2011-01-20
2011-01-21
2011-01-22
2011-01-23
2011-01-24
2011-01-25
2011-01-26
2011-01-27
2011-01-28
2011-01-29
2011-01-30
2011-01-31
2011-02-01
2011-02-02
2011-02-03
2011-02-04
2011-02-05
2011-02-06
2011-02-07
2011-02-08
2011-02-09
2011-02-10
2011-02-11
2011-02-12
2011-02-13
2011-02-14
2011-02-15
2011-02-16

(63 行受影响)



欢迎加入JAVA技术交流QQ群:179945282

欢迎加入ASP.NET(C#)交流QQ群:17534377


原文地址:https://www.cnblogs.com/q149072205/p/2104627.html