SQL SERVER 把逗號(hào)隔開的字符串拆分成行,有效
表

目標(biāo):把車牌號(hào)單獨(dú)成行,可過濾掉空字符串
查詢語句
SELECT companyname as 公司名稱,deptname as 部門名稱, carno as 車牌號(hào) ,iyear as 年度,imonth as 月份,money as 預(yù)算數(shù),
substring(carno,number,charindex(',',carno+',',number)-number) as chepaihao
FROM business_dw_sangong_qichefeiyong with(nolock) ,master..spt_values with(nolock)
where number >=1 and number < len(carno)
and type='p'
and SUBSTRING(','+carno,number,1)=','
ORDER BY companycode,deptcode,iyear desc ,imonth
效果:

補(bǔ)充:文章來源:http://www.zghlxwxcb.cn/news/detail-426314.html
匹配字符串開始位置的函數(shù)CHARINDEX(str1,str,[start])
CHARINDEX(str1,str,[start])函數(shù)返回子字符串str1在字符串str中的開始位置,start為搜索的開始位置,如果指定start參數(shù),則從指定位置開始搜索;如果不指定start參數(shù)或者指定為0或者負(fù)值,則從字符串開始位置搜索。
eg: select CHARINDEX('a','banana'),CHARINDEX('a','banana',4), CHARINDEX('na','banana', 4);
CHARINDEX('a','banana')返回字符串'banana'中子字符串‘a(chǎn)’ 第一次出現(xiàn)的位置,結(jié)果為2;
CHARINDEX('a','banana',4)返回字符串'banana'中從第4個(gè)位置開始子字符串‘a(chǎn)’的位置,結(jié)果為4;
CHARINDEX('na','banana', 4)返回從第4個(gè)位置開始子字符串‘na’第一次出現(xiàn)的位置,結(jié)果為5
解釋:
用charindex 索引(‘,11,’)在字段“TypeIDArray”的位置,且,只顯示大于0的數(shù)據(jù)
代碼逐行運(yùn)行時(shí),顯示的是“TypeIDArray”字段的值
如 ID=1小明的“TypeIDArray”字段的值是 (1,2,3,4,5,6,7,8,9)
代碼是(','+TypeIDArray+',')等于(‘,1,2,3,4,5,6,7,8,9,’)到這里我想各位看官就明白了
補(bǔ)充:
不過濾掉空字符串(null值好像還是會(huì)過濾掉)文章來源地址http://www.zghlxwxcb.cn/news/detail-426314.html
SELECT companyname as 公司名稱,deptname as 部門名稱, carno as 車牌號(hào) ,iyear as 年度,imonth as 月份,money as 預(yù)算數(shù),
substring(carno,number,charindex(',',carno+',',number)-number) as chepaihao
FROM business_dw_sangong_qichefeiyong with(nolock) ,master..spt_values with(nolock)
where number >=1 and number < len(carno)
and type='p'
and SUBSTRING(','+carno,number,1)=','
ORDER BY companycode,deptcode,iyear desc ,imonth
到了這里,關(guān)于SQL SERVER 把逗號(hào)隔開的字符串拆分成行的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!