标签归档:spt_values

mssql sqlserver 返回两个日期之间所有年份的方法分享


摘要:
下文讲述返回两个日期之间所有年份的方法分享,如下所示:
实验环境:sql server 2008 R2



实现思路:
第一种方法,使用while循环生成年份列表
第二种方法,借助外界一张拥有”连续编号的基础表”生成年份列表,如下所示:


    ---例:计算2009-1-1 至 2013-10-1之间的所有年份
    ---方法1:使用while遍历两个日期之间的年份记录
    create table [maomao365.com](yearInfo int)
     go
      declare @t datetime
      set @t ='2009-1-1'
       insert into  [maomao365.com](yearInfo) value(year(@t))
        
      while @t<'2013-10-1'
       begin 
          set @t = dated(year,1,@t)
          insert into  [maomao365.com](yearInfo) value(year(@t))
       end
   
      go
      select yearInfo from [maomao365.com]
     go
     truncate table [maomao365.com]
     drop      table [maomao365.com]
     go
    
     
   ---方法2:借助系统表 master..spt_values中的连续记录,生成连续年份的方法
      select 
         year(dateadd(year,number,'2009-01-01')) as [年份]
     from master..spt_values 
     where   
     dateadd(year,number,'2009-01-01') < '2013-10-1'
     and type='p'

mssql sqlserver master数据库spt_values表简介


摘要:
下文讲述spt_values的常用场景


spt_values在mssql中主要保存一些枚举值,此表是从sybase继承过来,通常我们称此表为”常量表”。

  ----表数据展示
  select * from master..spt_values
  ----连续数据展示
  select * from master..spt_values where type='P'

mssql_sqlserver_master_spt_values展示

mssql_sqlserver_master_spt_values展示


mssql_sqlserver_master_spt_values连续数据展示

mssql_sqlserver_master_spt_values连续数据展示


在spt_values表中,我们常使用0~2047个自然数,应用于连续时间的临时生成
例1:
生成2018年的连续月份

 ----从2018-1-1开始截取,只取12个月份
    select 
      left(convert(varchar(10),dateadd(month,number,'2018-01-01'),120),7) as [年月样式]
     from master..spt_values 
     where   
     number <=11 
     and type='p'
 
mssql_sqlserver_master_spt_values连续月份获取

mssql_sqlserver_master_spt_values连续月份获取