大概在去年的時候,作項目中遇到這麼一個需求,如圖所示,根據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,能夠理解爲一個輔助表吧,經過關聯該表取出指定位置數據。下面是個人語句blog
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<>''ast
而後就能夠獲得結果了百度