CREATE FUNCTION dbo.f_GetStr
(
@s ntext, --字符串列表
@pos int --要获取的数据信息段
)RETURNS nvarchar(4000)
AS
BEGIN
IF @s IS NULL RETURN(NULL)
DECLARE @s1 nvarchar(4000),@i int,@j int
SELECT @i=1,@j=PATINDEX('%+%',@s)
WHILE @pos>1 AND @j>0
SELECT @pos=@pos-1,
@j=PATINDEX('%+%',SUBSTRING(@s,@i,4000))
,@i=@i+@j
RETURN(SUBSTRING(@s,@i,PATINDEX('%+%',SUBSTRING(@s,@i,4000)+'+')-1))
ENDdeclare @str varchar(200)
set @str='φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m'
--set @str='φ444.5mm×253.00m+φ247.7mm×1274.98m'
select dbo.f_GetStr(@str,1) as a1
,dbo.f_GetStr(@str,2) as a2
,dbo.f_GetStr(@str,3) as a3
,dbo.f_GetStr(@str,4) as a4
,dbo.f_GetStr(@str,5) as a5
godrop function [dbo].[f_GetStr]--楼主,我可以以加号分开,但不足的,没有为空
,dbo.f_GetStr(ztcx,2) as a2
,dbo.f_GetStr(ztcx,3) as a3
,dbo.f_GetStr(ztcx,4) as a4
,dbo.f_GetStr(ztcx,5) as a5 from JP_JBSJBY
select substring(ztcx,1,charindex('+',ztcx)) a1, substring(right(ztcx,len(ztcx)-charindex('+',ztcx)),1,charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)))) a2,
substring(right(ztcx,len(ztcx)-charindex('+',ztcx)-charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)))),1,charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)-charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)))))) a3, right(ztcx,len(ztcx)-charindex('+',ztcx)-charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)))-charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)-charindex('+',right(ztcx,len(ztcx)-charindex('+',ztcx)))))) a4, substring(tgcx,1,charindex('+',tgcx)) b1, substring(right(tgcx,len(tgcx)-charindex('+',tgcx)),1,charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)))) b2,substring(right(tgcx,len(tgcx)-charindex('+',tgcx)-charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)))),1,charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)-charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)))))) b3, right(tgcx,len(tgcx)-charindex('+',tgcx)-charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)))-charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)-charindex('+',right(tgcx,len(tgcx)-charindex('+',tgcx)))))) b4 from JP_JBSJBY但这样是其中某几项为空,但并不是后面的为空,这样取从左到右 怎么取 谁能告诉我啊~~~~谢谢
declare @iCount int
,@iPos int
,@vGetString varchar(100)
,@vString varchar(100)
,@cDivisionChar char(1)
,@vSQLString varchar(500)
,@vInSQLString varchar(500)select @vString='φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m'
,@cDivisionChar='+'
if(right(rtrim(@vString),1)<>@cDivisionChar)
begin
set @vString=@vString+@cDivisionChar
end
select @iCount=len(@vString)-len(replace(@vString,@cDivisionChar,''))
,@iPos=1
,@vGetString=''select identity(int,1,1) ID into #Temp from sysobjects
select @vSQLString='create table TableName('
,@vInSQLString='insert into TableName('
select @vSQLString=@vSQLString+'a'+cast(id as varchar)+' varchar(50),'
,@vInSQLString=@vInSQLString+'a'+cast(id as varchar)+','
from #Temp where ID<=@iCount
select @vSQLString=left(@vSQLString,len(@vSQLString)-1)+')'
, @vInSQLString=left(@vInSQLString,len(@vInSQLString)-1)+')'
exec(@vSQLString)
drop table #Tempwhile(@iCount>=@iPos)
begin
select @vGetString=''''+
replace(left(@vString,len(@vString)-1),@cDivisionChar,''',''')+''''
,@iPos=@iPos+1
,@vSQLString=@vInSQLString+' values('+@vGetString+')'
exec(@vSQLString)
end
select *
from TableName
--刪除測試環境
drop table TableName
/*
--所影響的結果
a1 a2 a3
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m*/
insert @t select 'aa,bb,cc'
union all select 'AA,BB'
union all select 'AAA'select * from @tdeclare @i int,@s varchar(1000)
set @i=0
select col into #t from @t
while @@rowcount>0
BEGIN
select @i=@i+1
set @s = 'alter table #t ADD col'+cast(@i as varchar)+' varchar(10)' --少了一个set
exec(@s)set @s = 'update #t set col'+cast(@i as varchar) +
'='+'left(col,charindex('','',col+'','')-1),
col = stuff(col,1,charindex('','',col+'',''),'''')
where col>'''''
exec(@s)
end
set @s = 'alter table #t drop column col,col'+cast(@i as varchar)
exec(@s)
select * from #t
drop table #t--结果
col1 col2 col3
---------- ---------- ----------
aa bb cc
AA BB NULL
AAA NULL NULL
insert into tb select 1,'φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m'
insert into tb select 2,'φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m+φ24e1.3mm×3566.93m+φ241.3mm×35w66.93m'
go
create function f_str1(@id int)
returns varchar(8000)
as
begin
declare @sql varchar(8000)
select @sql=''
select @sql=@sql+replace(rtrim(ltrim(aaa)),'+',' ')+'' from tb where id=@id
return @sql
end
goselect dbo.f_str1(id) from tb
go
drop table tb
drop function f_str1
能不能利用left(col,charindex('','',col+'','')-1)之类的
用一条sql语句实现:
将用+号分割的部分,分为五个部分,如果没有五个部分,后面用Null来表示?谢谢各位帮忙的大虾了~~ !!