mysql spt values_【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 aJOIN 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) TWHERE T.c<>''

然后就可以得到结果了

1b572c2f39183c7963b734c907ee473d.png

15fa88be1c9f271ecb55a9a82baa7681.png

01678355db7b6596c256146de560a27b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值