日期:2014-05-18  浏览次数:20897 次

如何获得两个特定字符中间的子字符串?
各位大侠请帮忙:

小女子遇到如下问题:
现有母字符串:
PRD.ALL.SB.DDARET.NF.STMT.RAWDT(+1)   需要要得到子字符串:DDARET

说明:母字符串是有规律的:
PRD.ALL.SB.DDARET.NF.STMT.RAWDT(+1)  
PRD.ALL.SB.DDANBF1.NF.STMT.RAWDT(+1)  
PRD.ALL.SB.DDANBF2.NF.STMT.RAWDT(+1).................

我所需提取的是:DDARET,   DDANBF1,   DDANBF2.也就是说我需要第三个.和第四个.中间的字符串.可以用函数实现么?

先谢过各位。



------解决方案--------------------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


/*--字符串分函数

分拆指定分隔符的的字符串,返回指定位置的字符

--邹建 2004.04(引用请保留此信息)--*/

/*--调用示例

SELECT
dbo.f_splitSTR(userinfo, '||| ', 1) as 姓名,
dbo.f_splitSTR(userinfo, '||| ', 2) as 性格,
dbo.f_splitSTR(userinfo, '||| ', 3) as 手机,
dbo.f_splitSTR(userinfo, '||| ', 4) as 地址,
dbo.f_splitSTR(userinfo, '||| ', 5) as 其他
FROM(
SELECT userinfo = '张三|||温和|||手机|||通讯地址 '
)A
--*/
CREATE FUNCTION dbo.f_splitSTR(
@s varchar(8000), --要分拆的字符串
@split varchar(10), --数据分隔符
@pos int -- 取第几个
)RETURNS varchar(100)
AS
BEGIN
DECLARE @splitlen int, @re varchar(100)
SET @splitlen=LEN(@split+ 'a ') - 2
WHILE CHARINDEX(@split,@s) > 0 AND @pos > 0
SELECT
@re = LEFT(@s,CHARINDEX(@split,@s)-1),
@s=STUFF(@s,1,CHARINDEX(@split, @s)+@splitlen, ' '),
@pos = @pos - 1
RETURN(CASE
WHEN @pos = 0 THEN @re
WHEN @pos = 1 THEN @s
ELSE NULL END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


------解决方案--------------------
SELECT dbo.f_splitSTR( 'PRD.ALL.SB.DDARET.NF.STMT.RAWDT(+1) ', '. ',4)
SELECT dbo.f_splitSTR( 'PRD.ALL.SB.DDARET1.NF.STMT.RAWDT(+1) ', '. ',4)
SELECT dbo.f_splitSTR( 'PRD.ALL.SB.DDARET2.NF.STMT.RAWDT(+1) ', '. ',4)
------解决方案--------------------
create table t(col varchar(1000))
insert t select 'PRD.ALL.SB.DDARET.NF.STMT.RAWDT(+1) '
union all select 'PRD.ALL.SB.DDANBF1.NF.STMT.RAWDT(+1) '
union all select 'PRD.ALL.SB.DDANBF2.NF.STMT.RAWDT(+1) '

create function dbo.f_GetStr(@col varchar(1000))
returns varchar(100)
begin
declare @s varchar(100)
select @s=substring(stuff(@col,1,11, ' '),0,charindex( '. ',stuff(@col,1,11, ' ')))
return @s
end
go

select dbo.f_GetStr(col) from t

DDARET
DDANBF1
DDANBF2

------解决方案--------------------
可以。是在SQL語句中嗎?
Dim MyStr As String
Dim NFPosition As Integer

NFPosition=Instr(1,母字符串, "NF ")

MyStr=Right(left(母字符串,NFPosition-2),NFPosition-2-11)