SQL SERVER 把逗号隔开的字符串拆分成行,有效
表
目标:把车牌号单独成行,可过滤掉空字符串
查询语句
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
效果:
补充:文章来源:https://www.toymoban.com/news/detail-426314.html
匹配字符串开始位置的函数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值好像还是会过滤掉)文章来源地址https://www.toymoban.com/news/detail-426314.html
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 把逗号隔开的字符串拆分成行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!