Home > Database > Mysql Tutorial > SQLServerMASTER..spt

SQLServerMASTER..spt

WBOY
Release: 2016-06-07 15:15:20
Original
1450 people have browsed it

常常见到这个表,人家用得天花乱坠的。 自己select一看却莫名其妙的。 花点时间学下吧。 如上, 这个表主要用来保存一些枚举, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影。也可以叫系统常量表吧。 里面的东西比较多, 但最常用的是: --0

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

SQLServerMASTER..spt

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

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

--0~2047 共2048个数字
SELECT number FROM MASTER..spt_values WHERE  TYPE = 'p'
Copy after login

下面举例一些应用:

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
Copy after login

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 result
FROM   cte,
       MASTER..spt_values
WHERE  
	   1=1
	   AND CEILING(past) >= number	--原小数值向上取大 >= number
       AND TYPE = 'P'
       AND number > 0
/*
number      result
----------- ---------------------------------------
1           1.0
2           1.0
3           0.2
*/
Copy after login

由此可见, 这个玩意还是挺灵活的, 关键看你怎么用吧。

不过也有局限, 毕竟它连续的只有 0~2047个数字



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template