Maison > base de données > tutoriel mysql > SQLServerMASTER..spt

SQLServerMASTER..spt

WBOY
Libérer: 2016-06-07 15:15:20
original
1451 Les gens l'ont consulté

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

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

SQLServerMASTER..spt

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

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

--0~2047 共2048个数字
SELECT number FROM MASTER..spt_values WHERE  TYPE = 'p'
Copier après la connexion

下面举例一些应用:

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
Copier après la connexion

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
*/
Copier après la connexion

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

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



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal