SQL SERVER 把逗号隔开的字符串拆分成行

SQL SERVER 把逗号隔开的字符串拆分成行,有效

SQL SERVER 把逗号隔开的字符串拆分成行_第1张图片

目标:把车牌号单独成行,可过滤掉空字符串

查询语句

SELECT companyname as 公司名称,deptname as 部门名称,    carno as 车牌号 ,iyear as 年度,imonth as 月份,money as 预算数,
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

效果:

SQL SERVER 把逗号隔开的字符串拆分成行_第2张图片

补充:

匹配字符串开始位置的函数CHARINDEX(str1,str,[start])

CHARINDEX(str1,str,[start])函数返回子字符串str1在字符串str中的开始位置,start为搜索的开始位置,如果指定start参数,则从指定位置开始搜索;如果不指定start参数或者指定为0或者负值,则从字符串开始位置搜索。

eg: select CHARINDEX('a','banana'),CHARINDEX('a','banana',4), CHARINDEX('na','banana', 4);

CHARINDEX('a','banana')返回字符串'banana'中子字符串‘a’ 第一次出现的位置,结果为2;

CHARINDEX('a','banana',4)返回字符串'banana'中从第4个位置开始子字符串‘a’的位置,结果为4;

CHARINDEX('na','banana', 4)返回从第4个位置开始子字符串‘na’第一次出现的位置,结果为5

解释:

用charindex 索引(‘,11,’)在字段“TypeIDArray”的位置,且,只显示大于0的数据

代码逐行运行时,显示的是“TypeIDArray”字段的值

如 ID=1小明的“TypeIDArray”字段的值是 (1,2,3,4,5,6,7,8,9)

代码是(','+TypeIDArray+',')等于(‘,1,2,3,4,5,6,7,8,9,’)到这里我想各位看官就明白了

补充:

不过滤掉空字符串(null值好像还是会过滤掉)

SELECT companyname as 公司名称,deptname as 部门名称,    carno as 车牌号 ,iyear as 年度,imonth as 月份,money as 预算数,
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

你可能感兴趣的:(SQL,数据库,sql)