您好,欢迎访问一九零五行业门户网

SQLServerMASTER..spt

常常见到这个表,人家用得天花乱坠的。 自己select一看却莫名其妙的。 花点时间学下吧。 如上, 这个表主要用来保存一些枚举, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影。也可以叫系统常量表吧。 里面的东西比较多, 但最常用的是: --0
常常见到这个表,人家用得天花乱坠的。 自己select一看却莫名其妙的。 花点时间学下吧。
如上, 这个表主要用来保存一些枚举值, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影。也可以叫系统常量表吧。
里面的东西比较多, 但最常用的是:
--0~2047 共2048个数字select number from master..spt_values where type = 'p'
下面举例一些应用:1. 给定一个值, 希望得到某个日间范围的日期数据。
比如:已知今天是: 2015-01-30, 那后面连续30天的日期则为:
select convert(char(10), dateadd(day, number, getdate()), 120) as [日期]from master..spt_values where type='p' and number>0
2.  等分数--将一个数值以 1 来均分成多个等份,不足的显示小数;with cte(past) as( select 2.2 )select number, ( case when past >= number then 1.0 --当原小数值>当前行值显示 1.0 else past -floor(past) --否则显示为小数值 end ) as resultfrom cte, master..spt_valueswhere 1=1 and ceiling(past) >= number --原小数值向上取大 >= number and type = 'p' and number > 0/*number result----------- ---------------------------------------1 1.02 1.03 0.2*/
由此可见, 这个玩意还是挺灵活的, 关键看你怎么用吧。不过也有局限, 毕竟它连续的只有 0~2047个数字
其它类似信息

推荐信息