sql拆分字符串
❶ sql拆分逗号分隔的字符串
1、首先点击新建查询按钮,新建一个查询。
❷ sql分割字符串查询,分组统计
首先掌握sql中分割字符串的方法:
declare @sql varchar(2000),@tsql nvarchar(max),@split varchar(100)
set @sql='1,3,5,6,8' --保存的字符
set @split=','--分隔符
select @tsql='select '''+replace(@sql,@split,''' union all select ''')+''''
exec(@tsql)
----完成之后将查询结果保存在一张临时表中。
然后使用 select count(*) , 字段名 from 表名 group by 字段名 就可以得到您想要的结果了。
希望对您有所帮助!
❸ 在SQL Server数据库中拆分字符串函数
SQL Server数据库中拆分字符串函数的具体方法
CREATE FUNCTION uf_StrSplit (@origStr varchar( ) 待拆分的字符串@markStr varchar( )) 拆分标记 如 RETURNS @splittable table( str_id varchar( ) NOT NULL 编号ID string varchar( ) NOT NULL 拆分后的字符串)ASBEGINdeclare @strlen int @postion int @start int @sublen int @TEMPstr varchar( ) @TEMPid intSELECT @strlen=LEN(@origStr) @start= @sublen= @postion= @TEMPstr= @TEMPid= if(RIGHT(@origStr )<>@markStr )beginset @origStr = @origStr + @markStrendWHILE((@postion<=@strlen) and (@postion != ))BEGINIF(CHARINDEX(@markStr @origStr @postion)!= )BEGINSET @sublen=CHARINDEX(@markStr @origStr @postion) @postion;ENDELSEBEGINSET @sublen=@strlen @postion+ ;ENDIF(@postion<=@strlen)BEGINSET @TEMPid=@TEMPid+ ;SET @TEMPstr=SUBSTRING(@origStr @postion @sublen);INSERT INTO @splittable(str_id string)values(@TEMPid @TEMPstr)IF(CHARINDEX(@markStr @origStr @postion)!= )BEGINSET @postion=CHARINDEX(@markStr @origStr @postion)+ ENDELSEBEGINSET @postion=@postion+ ENDENDENDRETURNEND
例如 select * from uf_StrSplit( )
输出结果
lishixin/Article/program/SQLServer/201311/22421
❹ SQL里有没有类似SPLIT的分割字符串函数
createfunctionf_split(@cvarchar(2000),@splitvarchar(2))
returns@ttable(colvarchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert@t(col)values(substring(@c,1,charindex(@split,@c)-1))
set@c=stuff(@c,1,charindex(@split,@c),'')
end
insert@t(col)values(@c)
return
end
go
select*fromdbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')
dropfunctionf_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk
(4)sql拆分字符串扩展阅读
巧用SQL内置函数分割字符串
createfunction[dbo].[fn_char_splitbystr](
@Stringnvarchar(4000),function
@Delimiternvarchar(100)
)
returns@ValueTabletable([FValue]nvarchar(4000),[FSerial]int)
as
begin
declare@valuenvarchar(4000),@valnvarchar(4000)
declare@NextStringnvarchar(4000),@Posint,@NextPosint,@CommaChecknvarchar(1),@idint
set@value=@String
set@id=1
set@NextString=''
set@CommaCheck=right(@value,1)
set@value=@value+@Delimiter+space(len(@Delimiter)-1)
set@Pos=charindex(@Delimiter,@value)
set@NextPos=1
while(@pos<>0)begin
set@NextString=substring(@value,1,@Pos-1)
set@val=@NextString
if@id>1set@val=substring(@val,len(@Delimiter),len(@val))
insertinto@ValueTable([FValue],[FSerial])VALUES(@val,@id)
set@value=substring(@value,@pos+1,LEN(@value))
set@NextPos=@Pos
set@pos=charindex(@Delimiter,@value)
set@id=@id+1
end
return
end