首页 > 技术文章 > SQLServer——MASTER..spt_values

jie566 2015-12-18 11:48 原文

常常见到这个表,人家用得天花乱坠的。 自己select一看却莫名其妙的。

如上, 这个表主要用来保存一些枚举值, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影。也可以叫系统常量表吧。

里面的东西比较多, 但最常用的是:

select * from master..spt_values WHERE     type = 'P'

下面举例一些应用:

1. 给定一个值, 希望得到某个日间范围的日期数据。

比如:已知今天是: 2015-12-01, 那后面连续30天的日期则为:

SELECT CONVERT(CHAR(10), DATEADD(DAY, number, GETDATE()), 120) AS [日期]
FROM MASTER..spt_values WHERE TYPE='P' AND number>0

2.统计1~12月份的数据

SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
SELECT    a.number AS yue,
           b.s,b.grade
  FROM      ( SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
            ) a
            LEFT JOIN (select count(StudentID) as s ,count(GradeID) as grade,
                                MONTH(IntoDate) AS yue
                        FROM    Tianlai_Student
                        WHERE   DATEPART(yy, IntoDate) = '2015'
                        GROUP BY DATEPART(mm, IntoDate) ,
                                MONTH(IntoDate)
                      ) b ON a.number = b.yue

  

用上面的月份分组统计

推荐阅读