“汇总:角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块。”
这样一个字符串,想分别截出
角码\中梃连接件\垫条\拉杆\拼管压板下料574个
中梃连接件钻孔攻丝及装箱156个
加工泡沫塞块及装箱248块
求方法
这样一个字符串,想分别截出
角码\中梃连接件\垫条\拉杆\拼管压板下料574个
中梃连接件钻孔攻丝及装箱156个
加工泡沫塞块及装箱248块
求方法
DECLARE @GatherString NVARCHAR(2000) -- 字段字符串
DECLARE @CurrentString NVARCHAR(2000) -- 当前截取后的剩下字符串
DECLARE @SplitString NVARCHAR(500) -- 被截取的字符串
DECLARE @CurrentLength int -- 当前截取的长度
DECLARE @name NVARCHAR(4000)
CREATE TABLE #Collect
(
FName NVARCHAR(200)
)
set @name ='汇总:角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块。'
SET @GatherString = SUBSTRING(@name,CHARINDEX(':',@name)+1 ,LEN(@name)- CHARINDEX(':',@name))
-- 当前截取后的剩下字符串
SET @CurrentString = @GatherString
-- 检查 ","是否在字符串中出现
WHILE CHARINDEX(',',@CurrentString) <> 0
BEGIN
-- 截取来的字符串
SET @SplitString = SUBSTRING(@CurrentString,0,CHARINDEX(',',@CurrentString))
INSERT INTO #Collect (FName)VALUES(@SplitString)
-- 当前总字符串的字符个数
SET @CurrentLength = LEN(@CurrentString)
-- 判断是否当前剩下的字符串要大于出现的位子否下次取的话会出错
IF @CurrentLength > (CHARINDEX(',',@CurrentString)+ 1 )
BEGIN
-- 被截取后剩下的字符串
SET @CurrentString = SUBSTRING(@CurrentString,CHARINDEX(',',@CurrentString)+1,@CurrentLength - CHARINDEX(',',@CurrentString))
END
ELSE
BEGIN
SET @CurrentString = ''
END
END
select * from #Collectdrop table #Collect
只能返回
角码\中梃连接件\垫条\拉杆\拼管压板下料574个
中梃连接件钻孔攻丝及装箱156个
declare @sc nvarchar(200),@begin int,@sql nvarchar(900)
set @sc ='角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块'
--set @sc =',1,1,1,1,1,'
set @begin=1while CHARINDEX(',',@sc,@begin)>0
begin
if isnull(@sql,'')=''
set @sql='select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-1)+''''
else
set @sql=@sql+' union all select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-@begin)+''''
set @begin=CHARINDEX(',',@sc,@begin)+1
print @begin
end
--最后一个是逗号不取
if @begin -1<LEN(@sc)
set @sql=@sql+' union all select '''+ substring(@sc,@begin,LEN(@sc)-(@begin-1))+''''
--print @sql
exec (@sql)
set @sc =',汇总:下一般型材料263根,'
--set @sc =',1,1,1,1,1,'
set @begin=1
if CHARINDEX(',',@sc,@begin)=0
set @sql='select '''+ @sc+''''
else
begin
while CHARINDEX(',',@sc,@begin)>0
begin
if isnull(@sql,'')=''
set @sql='select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-1)+''''
else
set @sql=@sql+' union all select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-@begin)+''''
set @begin=CHARINDEX(',',@sc,@begin)+1
print @begin
end
--最后一个是逗号不取
if @begin -1<LEN(@sc)
set @sql=@sql+' union all select '''+ substring(@sc,@begin,LEN(@sc)-(@begin-1))+''''
end
exec (@sql)
SELECT CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
WHEN 0 THEN REQUEST_ADDRESS
ELSE SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress))
END NewAddress,
CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
WHEN 0 THEN ''
ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),2)
END DanYuan,
CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
WHEN 0 THEN ''
ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),1)
END Hao,
CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
WHEN 0 THEN ''
ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),3)
END Lou
FROM WORK_REQUEST
WHERE REQUEST_ID=526 源字符串:
Request_AllAddress
天祥街;4楼;2单元;14号 执行结果:
NewAddress DanYuan Hao Lou
天祥街 2单元 14号 4楼看看这个,前两天我也遇到这个问题,用这个方法是可以的,希望对你有帮助!