用函数处理字符串(提取/比较)

 
--1、如果提取小写字母:

IF OBJECT_ID('roy_Number','fn') IS NOT NULL
	DROP FUNCTION roy_Number
GO                                           

create function roy_Number(@name varchar(100))
returns varchar(100)
as
begin

    declare @s varchar(100)

    while patindex('%[a-z]%',@name collate Chinese_PRC_BIN)>0--用二进制排序区分大小写

        begin

            set @s=isnull(@s,'')+substring(@name,patindex('%[a-z]%',@name collate Chinese_PRC_BIN),1)

            set @name=stuff(@name,1,patindex('%[a-z]%',@name collate Chinese_PRC_BIN),'')

        end

    return @s
end

go

--测试:

declare @s varchar(100)

set @s='CHINA,r~!@#$o%^&*(y,&.;)(*wu^x%i943中8国$@人'

select dbo.roy_Number(@s) as 显示小写字母


/*
显示小写字母                                                                                               
---------------------------------------------------------------------------------------------------- 
roywuxi

(所影响的行数为 1 行)

*/

go


IF OBJECT_ID('fn_Split','fn') IS NOT NULL
	DROP FUNCTION fn_Str
GO                                           


--2、找出第一个字符串没有在第二个字符串出现的字符

create function fn_Split(
                    @s1 NVARCHAR(50),
                    @s2 NVARCHAR(50),
                    @split NVARCHAR(50)--分隔符
)
returns nvarchar(50)
as
begin
   
    declare @s3 nvarchar(50),@lenSplit int
   
    select @s3='',@s1=@s1+@split,@s2=@split+@s2+@split,@lenSplit=len(@split+'a')-2
   
    while charindex(@split,@s1)>0
   
        begin
   
            if charindex(@split+left(@s1,charindex(@split,@s1)+@lenSplit),@s2)=0
   
                SET @s3=@s3+left(@s1,charindex(@split,@s1)+@lenSplit)
   
            SET @s1=stuff(@s1,1,charindex(@split,@s1)+@lenSplit,'')
        end
    IF @s3>''
       return left(@s3,len(@s3)-1)
    RETURN @s3
 
end
 
go
declare @s1 nvarchar(50),@s2 nvarchar(50)
 
select @s1='u,a,b,c,d,e,f',@s2='c,b,d,rr'
 
select dbo.fn_Split(@s2,@s1,',') as [第一个字符串没有在第二个字符串出现的字符]


/*

第一个字符串没有在第二个字符串出现的字符                               
-------------------------------------------------- 
rr

(所影响的行数为 1 行)


*/


GO
--3.计算相同的字符数
IF OBJECT_ID('fn_Str','fn') IS NOT NULL
	DROP FUNCTION fn_Str
GO

CREATE FUNCTION fn_Str(
@Str1 NVARCHAR(1000)
,@Str2 NVARCHAR(1000)
)
RETURNS INT
AS
BEGIN
DECLARE @i INT=0,@j INT=1,@k INT,@a INT,@Str3 NVARCHAR(1000)
IF LEN(@Str1)<=LEN(@Str2)
	SELECT @k=LEN(@Str1),@Str3=@Str1
ELSE 
	SELECT @k=LEN(@Str2),@Str3=@Str2,@Str2=@Str1
WHILE @j<=@k
	BEGIN
		SET @a=CHARINDEX(SUBSTRING(@Str3,@j,1),@Str2)
		IF @a>0
			SELECT @Str1=STUFF(@Str1,@a,1,''),@i=@i+1
		SET @j=@j+1
	END
RETURN @i    
END
GO


SELECT dbo.fn_Str('asdf','1234a56') AS [相同的字符数]
/*
相同的字符数
1
*/



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值