当前位置: 代码迷 >> Sql Server >> 拆分字符串,该怎么处理
  详细解决方案

拆分字符串,该怎么处理

热度:142   发布时间:2016-04-24 08:46:03.0
拆分字符串
select spmc from a

得到
170*1.63


我想分拆spmc 得到

select spmc,spmc1,spmc2 from a
170*1.63,170,1.63

------解决思路----------------------
with table1 as
(
select '170*1.63' col1
)

select col1
, SUBSTRING(col1, 1, patindex('%*%', col1)-1)
, SUBSTRING(col1, patindex('%*%', col1)+1, 100) 
from table1

------解决思路----------------------
select spmc,substring(spmc1,1,3),substring(spmc2,5,8) from a 

------解决思路----------------------
select tname,left(tname,CHARINDEX('*',tname)-1),RIGHT(tname,LEN(tname)-CHARINDEX('*',tname))
 from test1 

------解决思路----------------------
引用:
Quote: 引用:

select tname,left(tname,CHARINDEX('*',tname)-1),RIGHT(tname,LEN(tname)-CHARINDEX('*',tname))
 from test1 



(所影响的行数为 83 行)

服务器: 消息 536,级别 16,状态 3,行 1
向 substring 函数传递了无效的 length 参数。


有些可能没有*


没有*的不拆分,就加个条件过滤一下
------解决思路----------------------
引用:
Quote: 引用:

select spmc,substring(spmc1,1,3),substring(spmc2,5,8) from a 


这个不行吧

select spmc,spmc1,spmc2 from a
170*1.63,170,1.63
17*1.63,17,1.63

怎么办


引用:
Quote: 引用:

select spmc,substring(spmc1,1,3),substring(spmc2,5,8) from a 


这个不行吧

select spmc,spmc1,spmc2 from a
170*1.63,170,1.63
17*1.63,17,1.63

怎么办

写错,应该是
select spmc,substring(spmc,1,3) spmc1,substring(spmc,5,8) spmc2  from a

或者你写个函数,到时候调用吧


create function split
(
 @str nvarchar(200),
 @i int 
)
returns nvarchar(200)
as
begin
 declare @len int
 declare @substr nvarchar(200)
 declare @wz int
 if CHARINDEX('*',@str)>0
 begin
 set @len= LEN(@str)
 set @wz=CHARINDEX('*',@str,1)
 if @i>0
 set @substr=SUBSTRING(@str,1,@wz-1)
 else
 set @substr=SUBSTRING(@str,@wz+1,@len-@wz)
 end
 else
 set @substr=@str
 
 return @substr
 
end
  相关解决方案