--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
*/
用函数处理字符串(提取/比较)
最新推荐文章于 2023-04-19 09:45:43 发布