大概在去年的时候,做项目中遇到这么一个需求,如图所示,根据Type字段筛选查找对应数据行,并找到该行字段为Levels中值最小的数据,例如当Type=1的时候,取出来的是0,当Type=2的时候,取出来的是2,当Type
大概在去年的时候,做项目中遇到这么一个需求,如图所示,根据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<>""
然后就可以得到结果了
--结束END--
本文标题: 【Sql Server】 master..spt_values 使用方法
本文链接: https://lsjlt.com/news/7043.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0