declare @s varchar(200) set @s='abc;def;ghi;jkl'insert into tb(col1,col2,col3,col4) select PARSENAME(replace(@s,';','.'),4),PARSENAME(replace(@s,';','.'),3),PARSENAME(replace(@s,';','.'),2),PARSENAME(replace(@s,';','.'),1)
n肯定不支持的,这个就是用了一些小技巧解决这个问题; 通用的就是函数,n 可以等于 x;
既然要插入,应该知道插入几个字段吧 试试这个满不满足CREATE FUNCTION [dbo].[f_GetStr]( @s varchar(8000), --包含多个数据项的字符串 @pos int, --要获取的数据项的位置 @split varchar(10) --数据分隔符 )RETURNS varchar(1000) AS BEGIN IF @s IS NULL RETURN(NULL) DECLARE @splitlen int SELECT @splitlen=LEN(@split+'a')-2 WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0 SELECT @pos=@pos-1, @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'') RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),'')) ENDGOSELECT dbo.f_GetStr('a,b,c,d,e,f,g',5,',')--------------------------- e(1 行受影响)
set @s='abc;def;ghi;jkl'insert into tb(col1,col2,col3,col4)
select PARSENAME(replace(@s,';','.'),4),PARSENAME(replace(@s,';','.'),3),PARSENAME(replace(@s,';','.'),2),PARSENAME(replace(@s,';','.'),1)
通用的就是函数,n 可以等于 x;
试试这个满不满足CREATE FUNCTION [dbo].[f_GetStr](
@s varchar(8000), --包含多个数据项的字符串
@pos int, --要获取的数据项的位置
@split varchar(10) --数据分隔符
)RETURNS varchar(1000)
AS
BEGIN
IF @s IS NULL RETURN(NULL)
DECLARE @splitlen int
SELECT @splitlen=LEN(@split+'a')-2
WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
SELECT @pos=@pos-1,
@s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
ENDGOSELECT dbo.f_GetStr('a,b,c,d,e,f,g',5,',')---------------------------
e(1 行受影响)