能够到安装文件里寻找 u_tables.sql 文件查看spt_values表注释情形

动用途景:

 

代码:

2012-1-3

  1. master..spt_values是中间辞典表,供SQL Server内部使用,繁多系统存储进程和函数的源代码中都接纳到了它;
  2. 列名分别为名称、值、类型、下限、上限、状态;
  3. 项目列的取值含义:D=Database Option P=Projection DB本田CR-V=Database Role DC=Database Replication I=Index L=Locks V=Device Type
    因为正如多,无法大器晚成一列举。其间类型P较为卓绝,它只是0-2047(与版本有关卡塔尔国之间的数字的容易列表,作为对持有类型之间关系的揣测。
  4. msdn查不到master..spt_values的认证,无需太深入摸底此表。

能够如此写:

DECLARE @startDate DATETIME = '2015-09-01'    ,@endDate DATETIME = '2016-03-01'SELECT B.年月,ISNULL(A.数量,0) 数量 --无数据的月份,数量设为0FROM (    --模拟某个按月份的统考计结果,中间存在无数据的月份    SELECT '2015-09' 年月, 100 数量    UNION ALL    SELECT '2015-12' 年月, 45 数量    UNION ALL    SELECT '2016-02' 年月, 78 数量) AFULL JOIN (    --用于生成连续的月份    SELECT CONVERT(NVARCHAR(7),DATEADD(MONTH,number,@startDate),120) 年月    FROM master..spt_values     WHERE TYPE = 'p'       AND number<=DATEDIFF(MONTH,@startDate,@endDate)) B ON A.年月 = B.年月ORDER BY B.年月+'-01'/*--月份不连续的结果年月   数量------- -----------2015-09 1002015-12 452016-02 78(3 行受影响)--------------------------------------------------------------月份连续的结果年月   数量------- -----------2015-09 1002015-10 02015-11 02015-12 452016-01 02016-02 782016-03 0(7 行受影响)*/

select number ``from master..spt_values ``where type=``'p'

spt_values说明:

 

 

 

按月份的总括时,若某个月份无数据,总括结果就不会是月份上接连的。可以由此上边方法获得月份接二连三的结果:

 

DECLARE @startDate DATETIME = '2015-09-01'    ,@endDate DATETIME = '2016-03-01'--写法一SELECT CONVERT(NVARCHAR(7),DATEADD(MONTH,number,@startDate),120) 年月FROM master..spt_values WHERE TYPE = 'p'   AND CONVERT(nvarchar(10),dateadd(MONTH,number,@startDate),120)<=@endDate--写法二SELECT CONVERT(NVARCHAR(7),DATEADD(MONTH,number,@startDate),120) 年月FROM master..spt_values WHERE TYPE = 'p'   AND number<=DATEDIFF(MONTH,@startDate,@endDate)/*年月-------2015-092015-102015-112015-122016-012016-022016-03(7 行受影响)*/

后生可畏经要调换的有的时候表中有个接二连三的数字列,大概一连的日期列,如下所示:

 

select MONTH(convert(varchar(10), dateadd(MONTH, number – 1,
DATEADD(yy,DATEDIFF(yy,0,getdate()),0)), 120)) as yue from
master.dbo.spt_values WHERE
type=’P’ AND number <= datediff(MONTH,
DATEADD(yy,DATEDIFF(yy,0,getdate()),0),
dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0)) ) + 1 AND
number>0

 

 

以此表貌似是从DB2借用过来的,它存储了部分连串存款和储蓄进程运营所急需的数目取值范围早前当前值,这些表共闻名称,值,类型,最小,最大,状态等多个列,五个羁绊,一个聚焦索引和多少个非聚集索引.
网络找不到这一个表布局所代表的含义,但从表的数据值来看,能够猜出一些来,比如,类型为B,那就相应是布尔型,它的名目和取值有多种,yes or no,no,yes,none.又如类型I有如是与索引有关的某个数额名.你也可以经过名称及值的限定来猜出一些.
自然数种类0~2047的name为NULL,类型为p,猜不出那么些p对应怎么样斯洛伐克语单词,大概在有个别系统存储进度中要用它自然数系列,或者正是对应的那些蕴藏进程名吧.
系统表中的东西,有个别是要弄了然的,而像spt_values那么些表,联机丛书中都从没交给表明,那就是说它并不要求你明白它,大家借使领会能拿它来援用(举个例子类型p的数字类别卡塔尔就足足了,并且,建议你不要试图去更动那么些表的内容,不然可能会晤世不能预料的后果. 

威澳门尼斯人36366com, 

 

master..spt_values约等于三个数字扶助表,在sql中驷不如舌运用number那些字段。

2012-1-1

正如朝气蓬勃段:

master..spt_values 相当于 master.dbo.spt_values

declare @days int
set @days=DATEDIFF(dd,@begin,@end)
select DATEADD(dd,number,@begin) 
from master.dbo.spt_values 
where type=’p’ AND number<=@days

select * from master.dbo.spt_values

 

 

master 是多少库名
spt_values是表名

?

项目列的取值含义:
D=Database Option P=Projection DBR=Database Role DC=Database Replication I=Index L=Locks V=Device Type
因为正如多,不可能朝气蓬勃一列举。当中类型P较为独特,它只是0-2047(与版本有关State of Qatar之间的数字的简约列表,作为对具备类型之间涉及的预测。

--这样查询一下就知道什么意思了

… …

咱俩应用了内部的type与number两列。

 

2012-1-2

 

 

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注