--将字符串转换Table
ALTER FUNCTION [dbo].[StringToTable]
(/**//* 根据输入的@ParamIDList列表来生Name列表*/
@ParamIDList Varchar(5000),
@ParamChar varchar(100) --分割符
)
RETURNS @Table_NameList table ( Name Varchar(200)) -- 建立表变量
AS
BEGIN
--Declare @Table_NameList table ( Name Varchar(20)) -- 建立表变量
Declare @Index_Param int /**//*参数 记录分隔符的位置*/
Declare @NeedParse varchar(5000) /**//*参数 没有处理的字符串*/
Select @Index_Param=CharIndex(@ParamChar, @ParamIDList)
if (@Index_Param=0)
begin /**//*一个名字组成*/
insert into @Table_NameList (Name) values(@ParamIDList)
end
else /**//*存在多个名字*/
begin
set @NeedParse =@ParamIDList
while (CharIndex(@ParamChar, @NeedParse)>0)
begin
insert into @Table_NameList (Name) values(SubString(@NeedParse,1,CharIndex(@ParamChar,@NeedParse)-1))
set @NeedParse =SubString(@NeedParse,CharIndex(@ParamChar, @NeedParse)+1,len(@NeedParse)-CharIndex(@ParamChar, @NeedParse))
end
insert into @Table_NameList (Name) values(@NeedParse)
end
--select * from @Table_NameList
RETURN
END
--使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO
--截取字符串出现的第几次数据
declare @sIncludeParaMDL varchar(1000),@nPosi int,@nPosi1 int,@nPosi2 int
set @sIncludeParaMDL='62.98 242.17 74.51 253.72 5.11 184.27 82.29 261.47 71.69 250.90 59.70 238.89 58.83 238.01 28.70 207.85 106.46 285.65 62.56 241.71 '
select @nPosi =charindex(' ',@sIncludeParaMDL,1)
select @nPosi1=1
select @nPosi2=1
while @nPosi>0
begin
--这里是地几个空格
if(@nPosi2=18)
select substring(@sIncludeParaMDL,1,@nPosi)
--这里是第17个到18之间的数
if(@nPosi2=18)
select substring(@sIncludeParaMDL,@nPosi1,@nPosi-@nPosi1)
--select @nPosi,@nPosi1,@nPosi2
select @nPosi1 = @nPosi+1,@nPosi2=@nPosi2+1
select @nPosi =charindex(' ',@sIncludeParaMDL,@nPosi1)
end
--字符串出现的次数
1:设有字符串str1 str2 ,现在要求str1 在 str2中出现的次数。
2:将str1后面加上一个字符,如:str1+'_',设更改后的字符串為str3。
3:在str2中如果有子串str1 ,将之替换成str3,替换后的字符串设為str4。
4:str4与str2的长度之差即為str1在str2中出现的次数。
看下面这个函数
CREATE function fn_SCountOneWordOnOtherWord
(
@Word NVARCHAR(200),
@WordAll NVARCHAR(2000)
)
RETURNS CHAR(4)
AS
BEGIN
RETURN len(replace(@WordAll,@Word,@Word+'_'))-len(@WordAll)
END