【Sql Server】 master..spt_values 使用方法[亲测有效]

【Sql Server】 master..spt_values 使用方法[亲测有效]大概在去年的时候,做项目中遇到这么一个需求,如图所示,根据Type字段筛选查找对应数据行,并找到该行字段为Levels中值最小的数据,例如当Type=1的时候,取出来的是0,当Type=2的时候,取出

【Sql Server】 master..spt_values 使用方法

     大概在去年的时候,做项目中遇到这么一个需求,如图所示,根据Type字段筛选查找对应数据行,并找到该行字段为Levels中值最小的数据,例如当Type=1的时候,取出来的是0,当Type=2的时候,取出来的是2,当Type=3的时候,取出来的是1,当我第一次看到数据存储方式的时候,我是有点吃惊的,因为一般来说,存多个id的时候,一般是这样写“1,2,3,4”,但这个表数据存进去的时候却在前后都加了一个逗号,这种写法并不常见,想了很久都没想出如何通过语句筛选。

      没想出问题,百度也不知道如何下手,最后还是同事告诉我一个方法,即通过master..spt_values方式进行搜索,老实讲也是第一次看到这个词  ,后来百度了下,大概理解了下,这个其实可以理解为数据库自带的一个常量表,之所以这样命名,因为它是在master系统数据库下面的视图里面,如图所示,使用它主要使用它的number字段和type字段,master..spt_values表的字段值为P的对应number字段值是从0-2047,可以理解为一个辅助表吧,通过关联该表取出指定位置数据。下面是我的语句

SELECT TOP 1 T.c FROM
(SELECT c = SUBSTRING(a.Levels, b.number, CHARINDEX(“,”, a.Levels + “,” , b.number) – b.number)
FROM LevelConfig a
JOIN master..spt_values b on b.type=”p” and b.number between 1 and LEN(a.Levels)
WHERE SUBSTRING(“,” + a.Levels, b.number, 1) = “,” AND a.Type=3) T
WHERE T.c<>””

然后就可以得到结果了

【Sql Server】 master..spt_values 使用方法[亲测有效]

【Sql Server】 master..spt_values 使用方法[亲测有效]

【Sql Server】 master..spt_values 使用方法[亲测有效]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7513.html

(0)
上一篇 2023-03-19
下一篇 2023-03-19

相关推荐

发表回复

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