用TSQL求子串在父串中出现的次数
2010-08-16 15:45:10 来源:WEB开发网优化的方法
上面讲的只是在网络上流传最广泛的方法,那么想要精炼代码,寻找更便捷和 高效的方法也是可行。下面再介绍两种较便捷的实现方式。
<方法一>
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
描述:
利用字符串长度计算字符出现次数
DEMO:
SELECT dbo.f_get_char_repeat_count('df ththth','tht')
*/
CREATE FUNCTION [dbo].[f_get_char_repeat_count]
(@str VARCHAR(8000),
@substr VARCHAR(8000)
)
RETURNS INT
BEGIN
RETURN (LEN(@str)-LEN(REPLACE(@str,@substr,'')))/LEN (@substr)
END
<方法二>SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
描述:利用长度差值求重复次数
DEMO:
SELECT fn_get_char_repeat_count_by_add_char ('ahahaahde','ah')
*/
CREATE FUNCTION [dbo]. [fn_get_char_repeat_count_by_add_char](
@str varchar(8000),--父串
@chr varchar(8000) --子串
) RETURNS INT
AS
BEGIN
RETURN(len(replace(@str,@chr,@chr+' '))-len(@str))
END
上面的<方法一>是用空字符替换父字符串中出现的子串,用剩余字符串 的长度与子字符串的长度求商;<方法二>是把为父字符串中出现子字符串的 地方都增加个空格,用替换后的父字符串长度减去原父字符串的长度。
总结
面对日常的工作需求,针对具体的问题,关键在于思路的不同。网络上丰富的 资源是可以借鉴的,但同时要注意辨别这些资源的可用性。网络资源的作用主要 给我们借鉴,扩展我们的思路,不应该直接投入使用。
更多精彩
赞助商链接